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 等待 。 和地图将帮助你。