我在node.js中编码了6个月。我已经阅读了有关异步编码,事件循环和回调等的概念。我知道“异步代码在执行同步代码堆栈时将永远不会执行。这就是node.js被单线程处理的意思”。但这是一个例子
var a = [4, 5, 6, 7];
var results = [];
a.forEach(function(result){
results.push(result + 1);
});
console.log(results);
据我了解,函数forEach的参数是回调,该回调在同步块完成执行之后被调用。这意味着我希望结果将是
[]
但这是事实
[5, 6 ,7, 8]
为什么会这样呢?forEach同步吗?还是我想念什么?以我的理解
console.log(results)
将在将数据推送到其中之前执行。
某些功能是同步的,其他功能是异步的。实际上,Array.forEach方法和所有基本功能都是同步的。如果要异步操作数组,则有两个选择:在forEach中调用函数,但不知道何时完成,或使用async库。
第一种方法:
var a = [4, 5, 6, 7];
var results = [];
a.forEach(function(result){
(function(i){
results.push(i);
}(result+1));
});
console.log(results);
使用async.js:
var async = require('async');
var a = [4, 5, 6, 7];
var results = [];
async.eachSeries(a, function(result, done) {
results.push(result+1);
done();
}, function () {
console.log('forEach finished');
});
console.log(results);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句