node.js - 使用 forEach 时与 Node.js 异步流程混淆。

标签 node.js asynchronous

我在 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 的异步性质,我还设法找到了一些有趣的读物:

关于node.js - 使用 forEach 时与 Node.js 异步流程混淆。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29206884/

相关文章:

spring - 如何在Spring的AsyncRestTemplate上设置超时?

azure - 使用java驱动程序异步写入documentdb

c# - 在 async/await 中调用 async 方法和 TaskScheduler

c# - 异步MySQL

javascript - 如何将像字符串这样的数组转换为 node.js 中的数组?

javascript - 等待 Promise.reject 或抛出错误以摆脱困境?

javascript - Node.js 文档未定义

javascript - Go 中的 Date.now() 等价物

javascript - 请帮我获取哈希密码

c# - 如果在套接字关闭后调用 Socket.BeginSend,则应用程序崩溃而不会抛出异常