javascript - 循环收集异步和同步数据

标签 javascript node.js mongodb

    var data = [10,21,33,40,50,69];
    var i = 0;          
    var dataSeq = [];
    while(i<data.length){                   
      if(data[i]%2 == 0){                       
          store.findOne({'visibility': true},function(err, data){                               
          dataSeq.push(i)
          i++;                              
          });                           
      }
      else{
       dataSeq.push(i)
       i++;                         
      }
    }
    if(i==data.length-1){
    console.log(dataSeq) // Should Print [1,2,3,4,5]
    return res.status(200).send({  message: 'Task Completed'})    
  }

我想根据循环执行收集数据。 我知道如何在 Node.js 中处理异步调用。但我想要按顺序回调。 例如虽然 if 条件中有一个异步调用,但我想拖拽循环,这样我就可以将 i 的值推送到 dataSeq 中,它将产生 [1,2,3,4,5] 数组。我想要该序列,因为我的后期操作依赖于该序列。

最佳答案

我认为asyncjs#eachSeries有你需要的。

你的代码会变成这样:

async.each(data, (item, callback) => {
   if(item%2 == 0){                       
          store.findOne({'visibility': true},function(err, data){                               
          dataSeq.push(i)
          i++;                              
          });                           
      }
      else{
       dataSeq.push(i)
       i++;                         
      }
}, (err) => {
  // if any of the callbacks produced an error, err would equal that error
});

关于javascript - 循环收集异步和同步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40041210/

相关文章:

javascript - 使用 jQuery 从 URL 弹出 iFrame

javascript - 更改对象会导致所有对象发生更改

node.js - 连接到单独的 docker 容器 (AWS ECS) 中的 MongoDB

javascript - 使用 mongoose 增加 mongodb 文档内属性的值

用于查找最新数据的 mongodb 聚合

javascript - 用于交换两个 css 样式表文件的 Chrome 扩展

java - 验证(单位测量)

javascript - 普通对象 Mongoose 不适用于排序

node.js - 在哪里建立 Mongoose 连接/任何数据库连接

javascript - MongoDB部分匹配