Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在我的db.collection forEach上使用Promise.all_Javascript_Node.js_Es6 Promise_Node Mongodb Native - Fatal编程技术网

Javascript 在我的db.collection forEach上使用Promise.all

Javascript 在我的db.collection forEach上使用Promise.all,javascript,node.js,es6-promise,node-mongodb-native,Javascript,Node.js,Es6 Promise,Node Mongodb Native,如何使用promise.all此功能: function getUsersGroups(users, req) { users.forEach(function(user) { user.groups = []; db.collection("groups") .find({ "users._id": String(user._id) }) .toArray(function(err, docs) { user.groups =

如何使用promise.all此功能:

function getUsersGroups(users, req) {
  users.forEach(function(user) {
    user.groups = [];

    db.collection("groups")
      .find({ "users._id": String(user._id) })
      .toArray(function(err, docs) {
          user.groups = docs;
      });
  });

  return users;
}
 getUsersGroups(docs, req)
          .then(users => {
            res.send(users);
          })
          .catch(error => {
            // if you have an error
          });
我不知道该怎么办,谢谢你

PS:用户数组没有通过文档实现(他们控制台日志正常)

这是我的第二次尝试:

function getUsersGroups(users, req) {
  users.forEach(
    (user, index, array) => (
      array[index].user =[]
      array[index].user.groups = myApiCall(user))
  );

  function myApiCall(user) {
    db.collection("groups")
      .find({ "users._id": String(user._id) })
      .toArray(function(err, docs) {
        console.log(docs);
        return docs;
      });
  }

  return users;
}



  array[index].user.groups = myApiCall(user))
      ^^^^^

SyntaxError: Unexpected identifier
编辑:

最后,我使用这个函数,正如Ashish所说(它获取用户所在的所有组,并更新用户模型):

我在另一个node.js函数中这样调用:

function getUsersGroups(users, req) {
  users.forEach(function(user) {
    user.groups = [];

    db.collection("groups")
      .find({ "users._id": String(user._id) })
      .toArray(function(err, docs) {
          user.groups = docs;
      });
  });

  return users;
}
 getUsersGroups(docs, req)
          .then(users => {
            res.send(users);
          })
          .catch(error => {
            // if you have an error
          });
多谢各位

async function getUsersGroups(users, req) {
  await Promise.all(users.map(user => {
    return db.collection("groups")
      .find({ "users._id": String(user._id) })
      .toArray()
      .then(group => {
        user.groups = group;
      })
  }));

  return users;
}

希望这有助于查看
toArray
的文档,如果未指定回调,它将返回一个
Promise
。然后,我们可以使用
.map
而不是
.forEach
生成承诺数组,然后将其传递给
承诺。所有

function getUsersGroups(users, req) {
  const promises = users.map(function(user) {
    user.groups = []
    return db
      .collection("groups")
      .find({ "users._id": String(user._id) })
      .toArray()
      .then(groups => {
        user.groups = groups
      })
  });

  return Promise.all(promises);
}

请注意,这会改变用户对象。也就是说,您传递给函数的任何
用户
都将通过设置
字段进行修改。

这是否与
节点mongodb native
相关?是的,存在多个api调用。这是否回答了您的问题?您好,如何返回用户?我这样调用函数:docs=getUsersGroups(docs,req)@HarmoniusTool我已经编辑了我的答案。基本上是等待promise all完成,然后返回用户。我如何调用此函数?等待promise.all(users.map)(user=>{^^^^^^ SyntaxError:await仅在异步函数中有效,只需对函数getUsersGroups执行ass
async
。我已经添加了它。非常感谢,您的函数正在工作,但当我从另一个函数调用它时,getUsersGroups(docs,req);为空,而console.log(groups)说它在getUsersGroups()内部时被填充。如何调用此函数?我尝试这样调用它:getUsersGroups(docs,req)。然后(result=>{console.log(result);res.send(result);})。catch(error=>{//如果有错误});非常感谢您的出色回答,我终于使用了Ashish答案,并调用了像getUsersGroups(docs,req)这样的函数。然后(result=>{console.log(result);res.send(result);})。catch(error=>{//if you have error});但我猜您的答案也在起作用。