节点 MySQL 嵌套异步循环中的两个查询
Node MySQL two queries in nested async loop
我需要在异步循环中进行两个数据库查询。我使用 node-mysql
和 async.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
为什么会这样?我最近在第二次查询后调用了第三个CB。
我什至尝试过 async.waterfall([getUser, insert], thirdCB)
但结果相同。
感谢您的帮助!
经过长时间的研究,我发现 !
此问题的解决方案是使用 eachLimit
,将限制设置为 1
,而不是 every
。这将限制每个项目的异步操作量。
我需要在异步循环中进行两个数据库查询。我使用 node-mysql
和 async.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
为什么会这样?我最近在第二次查询后调用了第三个CB。
我什至尝试过 async.waterfall([getUser, insert], thirdCB)
但结果相同。
感谢您的帮助!
经过长时间的研究,我发现
此问题的解决方案是使用 eachLimit
,将限制设置为 1
,而不是 every
。这将限制每个项目的异步操作量。