【发布时间】:2020-03-02 23:08:49
【问题描述】:
下面的代码有一个缺陷,因为我得到undefined的数组:
let filters = [];
async function getFilters(tiers) {
return await Promise.all(
tiers.map(async t => {
let id = new ObjectId(t.filter);
filters.push(
await conn.collection('TierScheduleFilter').find({
_id: id
}).toArray(function(err, filter) {
if (err || !filter) {
reject('no filter || error');
}
return filter;
});
);
});
);
}
await getFilters(tiers);
console.log(filters); // 4 filters => [ undefined, undefined, undefined, undefined ]
代码将检索除所有未定义值之外的所有过滤器。
【问题讨论】:
-
这一切都在另一个异步函数中吗?你不能在异步函数之外声明
awaits。 -
getFilters(tiers).then(x => console.log(filters))(注意:伪代码)之类的东西可能对你有用。由于您的代码不再同步,因此您的 console.log 会在其余代码有机会完成之前运行。 -
... 如果您不强制 console.log 在 getFilters 调用完成后运行,它将始终打印 undefined 因为该内容尚未完成评估在代码中的那一点。