如何在异步循环之后运行异步函数?循环不返回承诺,这意味着不能使用等待语法来管理执行顺序。什么是一个很好的方式来管理一个循环像一个承诺。
这个问题发生在我的快递线路上。在使用循环从reids DB检索数据之后,我尝试运行res.json,但是如果我将代码放在后面,res.json将在循环之前运行。我用了一种愚蠢的方法。我检测循环的最后一次迭代并运行我的res.json函数。我认为这不应是解决这个问题的正确办法。
app.get('/redisApi/v0.3/users', (req, res) => {
var users = [];
redis.scan(0, 'MATCH', 'user:info:*', 'COUNT', 10000).then(key_res => {
//where loop starts
for (let i = 0; i < key_res[1].length; i++) {
redis.hgetall(key_res[1][i]).then(user_res => {
const newOBJ = Object.assign(user_res);
users.push(newOBJ);
//detect last iteration of the loop
if (i === key_res[1].length - 1) {
res.status(200).json({
status: 'success',
data: {
users
}
});
}
});
}
});
});寻找一种管理循环执行顺序的方法。
发布于 2019-09-24 21:06:44
有很多解决这个问题的工具,这里有两个:
key_res[1].length数组和映射函数的循环逻辑。redis.hgetall返回的承诺,并在这个数组上使用Promise.all。https://stackoverflow.com/questions/58087862
复制相似问题