使用forEach时,与node.js异步流混淆。

用户名

我在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)

将在将数据推送到其中之前执行。

凝血酶19

某些功能是同步的,其他功能是异步的。实际上,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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

node.js上的异步/流系列

来自分类Dev

Node.js在异步(可读)完成之前完成(结束)流

来自分类Dev

异步node.js数据流混乱

来自分类Dev

关于Node.js中的异步执行流

来自分类Dev

与异步序列控制流混淆

来自分类Dev

使用async.forEach和异步操作的Node.js

来自分类Dev

Node.js:您可以在流中使用异步函数吗?

来自分类Dev

使用异步node.js函数控制流和错误处理

来自分类Dev

使用异步/等待时流关闭

来自分类Dev

使用异步与 mongoDB 时如何修复 node.js 返回 {}

来自分类Dev

node.js中的foreach异步功能

来自分类Dev

在Node.js中使用流时发生内存泄漏?

来自分类Dev

使用混淆矩阵评估张量流

来自分类Dev

如何在保留顺序的同时异步处理Node.js中的流事件?

来自分类Dev

使用highland.js参照原始流数据依次执行异步任务

来自分类Dev

使用highland.js参照原始流数据依次执行异步任务

来自分类Dev

Node.js安装混淆了使用Angular.js

来自分类Dev

在node.js中管理嵌套的异步foreach循环

来自分类Dev

在Node.js中异步foreach和猫鼬

来自分类Dev

在node.js中使用异步瀑布

来自分类Dev

在node.js中使用异步模块

来自分类Dev

在node.js中使用异步模块

来自分类Dev

被Node.js readline on()方法混淆

来自分类Dev

在异步任务仍在使用时处置流

来自分类Dev

使用异步处理高地流块

来自分类Dev

forEach在Node.js中使用生成器

来自分类Dev

在node.js中使用forEach引用JSON对象

来自分类Dev

使用 mongoDB 调用/node.js 的 Foreach 循环

来自分类Dev

使用node.js安装时出错