gpt4 book ai didi

javascript - 具有异步等待的数组减少功能

转载 作者:行者123 更新时间:2023-11-30 20:07:58 25 4
gpt4 key购买 nike

我试图从基于异步运算符的数组对象中跳过一个对象。我试过以下情况,但出现类型错误。

试过方法一

newObjectArray = await Promise.all(objectAray.reduce(async (result, el) => {
const asyncResult = await someAsyncTask(el);
if (asyncResult) {
result.push(newSavedFile);
}
return result;
}, []));

尝试过方法二

newObjectArray = await Promise.all(objectAray.reduce(async (prevPromise, el) => {
const collection = await prevPromise;
const asyncResult = await someAsyncTask(el);
if (asyncResult) {
prevPromise.push(newSavedFile);
}

collection.push(newSavedFile);
return collection;
}, Promise.resolve([])));

错误

'TypeError: #<Promise> is not iterable',
' at Function.all (<anonymous>)',

最佳答案

在您的第一次尝试中,result 是一个 promise,因为所有 async 函数在被调用时都会评估为一个 promise,因此您必须 await result在你可以推送到数组之前,然后你不需要 Promise.all:

 newObjectArray = await objectAray.reduce(async (result, el) => {
const asyncResult = await someAsyncTask(el);
if (asyncResult) {
(await result).push(newSavedFile);
}
return result;
}, []);

但我猜想事后过滤会更快:

 newObjectArray = (await Promise.all(objArray.map(someAsyncTask))).filter(el => el);

关于javascript - 具有异步等待的数组减少功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52674055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com