我能指望每次调用doSomething()时完成的nodeID映射吗?
nodeIDs = $.map(nodeIDs, function(n){ return n.match(/\d+$/); }); doSomething(nodeIDs);
我以为node.js中的所有回调都是异步的?我确实读过一篇关于通用编程的文章,说回调可以是同步的,但是我不确定node.js吗?
JavaScript也是一种功能编程语言。您在这里拥有的是“高阶函数”,该函数将函数作为参数。高阶函数是同步的(但请参见下面的注释)。
资料来源:
map()是高阶函数的典型示例。它接受一个函数并将其应用于数组的所有元素。这个定义听起来很“实用”。Node也未提供此功能。它由MDN Array.prototype.map()记录,并由ECMAScript 5.1指定。
map()
要回答您的问题:是,在应用所有元素 之后*doSomething(nodeIDs)将调用。 *
doSomething(nodeIDs)
注意: 高阶函数是功能编程的概念。JavaScript是功能性的,但在浏览器内部或服务器上执行代码的实用性方面也深深扎根。我要说的是,setTimeout()即使它以函数作为参数,setTimeout()也不是一个高阶函数,因为它不是真正的纯函数,因为它使用时间。纯功能是永恒的。例如,的结果map()不依赖于时间。这就是这个问题的实质所在。如果某些事情不依赖于时间,则可以同步执行它。问题解决了。
setTimeout()
感谢Simon挑战JavaScript中高阶函数的定义。