Current.senders.forEach(sender => {
let UserList = Meteor.users.findOne({"_id":sender});
console.log(UserList.profile.name)
});
它将通过文档A的发件人,将在文档B上搜索profile.name。
问题是我只得到第一个,另一个是未经解决的。
有没有办法让他们有一个承诺?
答案 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 => { ... })
。