【发布时间】:2021-09-30 09:17:37
【问题描述】:
下面的代码是我写的。
我知道'await'关键字不应该在for循环中。
const booksNotBackedUp: number[] = [];
for (let i = 0; i < usersBooks.length; i += 1) {
const files = await Util.file.getFiles(Util.file.DATA_BUCKET, { prefix: `${userId}/data/${usersBooks[i]}/sqlite` });
if (files.length === 0) booksNotBackedUp.push(usersBooks[i]);
}
console.log('booksNotBackedUp', booksNotBackedUp);
所以,我尝试过这样,但“结果”包含“userBooks”中的所有元素,这不是我想要的。
const booksNotBackedUp: any[] = [];
userBooks.forEach((book) => {
booksNotBackedUp.push(Util.file.getFiles(Util.file.DATA_BUCKET, { prefix: `${userId}/data/${book}/sqlite` })
})
const result = await Promise.all(booksNotBackedUp);
console.log('booksNotBackedUp', result);
请帮助这个可怜的新手????
【问题讨论】:
-
根据某些条件过滤
Promise.all()之后的结果。 -
你得到了什么结果?你有什么期望?
-
“那不是我想要的。”:不清楚你想要什么。您在寻找:
const result = (await Promise.all(booksNotBackedUp)).filter(files => !files.length);? -
@Braks,不,这是一种反模式。
getFiles已经返回了承诺。无需再创建一个。 -
@Braks:What is the explicit promise construction antipattern and how do I avoid it?。 Asker 正在在两个代码块 (
getFiles) 中调用异步函数。
标签: javascript typescript async-await promise