gpt4 book ai didi

javascript - 奇怪的异步 node.js

转载 作者:行者123 更新时间:2023-11-30 20:42:14 26 4
gpt4 key购买 nike

我正在尝试查找我的用户正在收听的所有音乐。我是这样做的:

User.find().exec((err, users) => {
users.forEach((user, index) => {
Musics.count({ idReader: user._id }, (err, count) => {
result.push({ mail: user.mail, count: count });
if (index >= users.length - 1) {
return res.json(result);
}
});
});
});

它有效但不是每次都有效。有时我只有 30% 的用户,有时是 100%。我认为这是因为异步。但我不知道如何做不同的事情。谢谢!

最佳答案

您的直觉是正确的。在您的 forEach 循环中,您为每个用户进行计数查询,并且当您按顺序发出请求时,它们不一定按顺序解析。这就是为什么检查 index 是不值得信任的。这是一个应该成功的片段:

User.find().exec((err, users) => {

// get an array of promises for each count query
var promises = users.map(user =>

Musics.count({ idReader: user._id })
// format ther result
.then(count => ({
mail: user.mail,
count: count
}))
);

// after each request to the db is ready
Promise.all(promises)
.then(result => {
res.json(result)
})
.catch( err => {
console.log(err)
res.status(500).send('Something went wrong')
})
});

关于javascript - 奇怪的异步 node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49129754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com