Node.js Array.map()是asynchronous的吗?

我可以指望每次doSomething()被调用时都完成映射吗?

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

我认为node.js中的所有callback都是asynchronous的? 我读过一篇关于一般编程的文章,callback可能是同步的,但我不确定node.js?

JavaScript也是一种函数式编程语言。 你在这里有一个“高阶函数”,一个函数作为一个参数。 高阶函数是同步的(但请参阅下面的注释)。

资料来源:

  • 函数式编程
  • JavaScript中的高阶函数

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

回答你的问题:是的, doSomething(nodeIDs) 所有元素被应用后被调用。


注:高阶函数是函数式编程的概念。 JavaScript是function性的,但也深深地在浏览器或服务器内执行代码的实用性。 我会说,例如setTimeout()不是一个高阶函数,即使它将一个函数作为参数,因为setTimeout()因为使用时间而不是纯粹的function。 纯粹的function是永恒的。 例如map()的结果不依赖于时间。 这就是这个问题的真正意义。 如果某个东西不依赖于时间,那么就同步执行它。 问题解决了。

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

是的, .map是同步的。 “callback”并不意味着“asynchronous”。

导入async模块有一个asynchronous的“ map ”方法

 var async = require('async'); var arr = ['1','2']; async.map(arr, getInfo, function (e, r) { console.log(r); }); function getInfo(name, callback) { setTimeout(function() { callback(null, name + 'new'); }, 1000); } 

示例: http : //runnable.com/UyR-6c2DZZ4SmfSh/async-map-example-for-node-js

这个函数是同步的,否则它不能返回映射操作的结果。

任何可能需要较长时间(主要是由于IO)的callback在nodejs中是asynchronous的 – 除非该方法明确标记为同步的(例如fs.readFileSync – 但不使用callback)。 不知何故,你可能会感到困惑。

有有用的lib 等待 。 和地图将帮助你。