我正在尝试使用一些数据库调用进行循环,一旦它们全部完成,我就会发送结果。 - 使用 promise ,但如果我在回调后得到 promise ,它就不起作用。
let notuser = [];
let promise = new Promise((resolve, reject) => {
users.forEach((x) => {
User.find({
/* query here */
}, function(err, results) {
if(err) throw err
if(results.length) {
notuser.push(x);
/* resolve(notuser) works here - but were not done yet*/
}
})
});
resolve(notuser); /*not giving me the array */
}).then((notuser) => {
return res.json(notuser)
})
我该如何处理这个问题?
最佳答案
下面是一个名为 findManyUsers
的函数,它可以执行您要查找的操作。 Mongo find 将向您返回一个 Promise,因此只需在循环中收集这些 Promise 并与 Promise.all() 一起运行它们即可。所以你可以看到它的实际效果,我添加了一个模拟 User 类,其中包含一个 promise 返回的 find 方法...
// User class pretends to be the mongo user. The find() method
// returns a promise to 'find" a user with a given id
class User {
static find(id) {
return new Promise(r => {
setTimeout(() => r({ id: `user-${id}` }), 500);
});
}
}
// return a promise to find all of the users with the given ids
async function findManyUsers(ids) {
let promises = ids.map(id => User.find(id));
return Promise.all(promises);
}
findManyUsers(['A', 'B', 'C']).then(result => console.log(result));
关于在 foreach 循环后使用多个 mongoose find 进行 JavaScript Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53896615/