我在 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 的参数是回调,稍后在同步块(synchronized block)执行完成后调用。这意味着我预计结果将是
[]
但事实就是如此
[5, 6 ,7, 8]
为什么会发生这种情况? forEach 是同步的吗?或者我错过了什么?据我了解,
console.log(results)
将在数据插入其中之前执行。
最佳答案
您传递给 Array.prototype.forEach()
的回调是同步的。因此,它会阻塞执行线程,直到完成将函数应用于数组的所有成员为止。
如果您想进一步研究 JavaScript 的异步性质,我还设法找到了一些有趣的读物:
JavaScript, Node.js: is Array.forEach asynchronous?
该主题解决了您当前面临的相同场景,并且 它还提供了
Array.prototype.forEach()
的异步替代方案Are all javascript callbacks asynchronous? If not, how do I know which are?
关于node.js - 使用 forEach 时与 Node.js 异步流程混淆。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29206884/