承诺里面的每一个

时间:2018-06-01 12:05:22

标签: node.js meteor

  Current.senders.forEach(sender => {
    let UserList = Meteor.users.findOne({"_id":sender});
    console.log(UserList.profile.name)
  });

它将通过文档A的发件人,将在文档B上搜索profile.name。

问题是我只得到第一个,另一个是未经解决的。

有没有办法让他们有一个承诺?

2 个答案:

答案 0 :(得分:2)

如果您需要一个接一个地运行async/await,您可以使用find来承诺等待。

Current.senders.forEach((sender) => {
  const UserList = await Meteor.users.findOne({"_id":sender});

  console.log(UserList.profile.name);
});

您可以使用Promise.all同时运行所有find,然后处理退货。

const UserLists = await Promise.all(Current.senders.map(sender => Meteor.users.findOne({ "_id": sender })));

Promise.all(Current.senders.map(sender => Meteor.users.findOne({ "_id": sender })))
  .then((UserLists) => {
     // Deals with ok
  })
  .catch((err) => {
     // Deals with error
  });

UserLists此处包含数组中的所有find结果。

答案 1 :(得分:1)

// helper function to keep the rest of the code neat
const findUserBySender = sender => Meteor.users.findOne({"_id": sender});


async function test() {
    // run all searches in parallel via .map(), and await the overall result
    let userList = await Promise.all(Current.senders.map(findUserBySender));
    console.log(userList);
}

而不是异步/等待你当然可以使用Promise.all(...).then(userList => { ... })