小编典典

Node.js Array.map()是异步的吗?

node.js

我能指望每次调用doSomething()时完成的nodeID映射吗?

nodeIDs = $.map(nodeIDs, function(n){
    return n.match(/\d+$/);
});
doSomething(nodeIDs);

我以为node.js中的所有回调都是异步的?我确实读过一篇关于通用编程的文章,说回调可以是同步的,但是我不确定node.js吗?


阅读 969

收藏
2020-07-07

共1个答案

小编典典

JavaScript也是一种功能编程语言。您在这里拥有的是“高阶函数”,该函数将函数作为参数。高阶函数是同步的(但请参见下面的注释)。

资料来源:

map()是高阶函数的典型示例。它接受一个函数并将其应用于数组的所有元素。这个定义听起来很“实用”。Node也未提供此功能。它由MDN
Array.prototype.map()记录
,并由ECMAScript
5.1
指定。

要回答您的问题:是,在应用所有元素 之后*doSomething(nodeIDs)将调用。 *


注意:
高阶函数是功能编程的概念。JavaScript是功能性的,但在浏览器内部或服务器上执行代码的实用性方面也深深扎根。我要说的是,setTimeout()即使它以函数作为参数,setTimeout()也不是一个高阶函数,因为它不是真正的纯函数,因为它使用时间。纯功能是永恒的。例如,的结果map()不依赖于时间。这就是这个问题的实质所在。如果某些事情不依赖于时间,则可以同步执行它。问题解决了。

感谢Simon挑战JavaScript中高阶函数的定义。

2020-07-07