在 foreach 循环后使用多个 mongoose find 进行 JavaScript Promise

标签 javascript node.js mongoose promise

我正在尝试使用一些数据库调用进行循环,一旦它们全部完成,我就会发送结果。 - 使用 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/

相关文章:

javascript - 从变量生成多个 HTML 文件

javascript - 过滤 MongoDB 中的深层填充字段

javascript - 无需用户的 IdSrv3 身份验证

node.js - 使用 WebRTC 开会时将实时音频流转换为文本

node.js - redis中循环保存数据的方法

node.js - 无法将 mongoose 插件连接到 Express 中的 mongodb

node.js - MongoDB 如何捕获deleteMany中的错误

javascript - 突出显示 html 原始文本中的特定文本

javascript - Prototype.js unescapeHTML 适用于对象中的所有元素

javascript - 用于选择国家/地区和国家的下拉菜单