嵌套异步循环中的节点MySQL两个查询

时间:2018-08-13 12:18:59

标签: javascript node.js asynchronous async.js node-mysql

我需要在异步循环中进行两个数据库查询。我使用node-mysqlasync.js

这是我的代码示例:

async.every(firstArray, (first, firstCB) => {
  async.every(secondArray, (second, secondCB) => {
    async.every(thirdArray, (third, thirdCB) => {
      model.getUsers(third, (res) => {
         model.insert(res.stuff, () => {
           thirdCB()
         })
       })
     }, (err) => {
       secondCB()
     });
    }, (err) => {
     thirdCB()
    })
  }, () => {
  firstCB()
}, () => {
  // done 
})

迭代过程很好。我的问题是我在执行两个查询的最后一个循环:console.log .. considering thirdArray.length === 3

..getting users
..getting users
..getting users
..inserting stuff
..inserting stuff
..inserting stuff

为什么呢?我最近在第二次查询后致电了ThirdCB。

我什至尝试使用async.waterfall([getUser, insert], thirdCB),但结果相同。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

经过长期研究,我发现了it

解决方案是使用eachLimit,将限制设置为1,而不是every。这将限制每个项目的异步操作量。