繁体   English   中英

如何有条件地将元素放入 Promise.all() 数组中?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM