[英]How can I put elements in Promise.all() array conditionally?
下面的代码是我写的。
我知道 '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 尚未解析,因此无法预先将 Promise 添加到数组中。
您可以在 promise.all() 解决后进行过滤。 在这种情况下,您将获得所有结果,并且可以使用数组的过滤方法。
您可以使用以下方法。 承诺。所有
let result = await Promise.all(userBooks.map(async (data) => {
return await Util.file.getFiles(Util.file.DATA_BUCKET, {
prefix: `${userId}/data/${book}/sqlite`
})
}));
console.log('booksNotBackedUp', result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.