gpt4 book ai didi

javascript - 从 Promise 的 catch 添加到现有的 Promises.all 数组

转载 作者:行者123 更新时间:2023-12-04 15:10:10 24 4
gpt4 key购买 nike

我有一段代码,其中我将一些异步操作添加到 promise 数组并调用 Promise.all 来解决所有这些操作并等待结果。我期望检查第二个操作是否失败,如果发生这种情况,则从它的 catch block 中执行第一个操作。如果我将一个 catch block 附加到该数组的一个 promise 并执行异步操作,我可以将其添加到同一个 promise 数组,还是最好单独等待此操作。

const promises = [];
promises.push(performAsync1(record))
promises.push(performAsync2().catch(() =>
console.error("Async2 Failed");
promises.push(performAsync1(failedRecord));
}
const responses = await Promise.all(promises);

最佳答案

这可能会因为“主要”基于意见而关闭,但我会将 performAsync2 操作/重试组合分配给一个变量。

const performAsync2Retrying = performAsync2(record).catch(()=> performAsync1(record))
const promises = []
promises.push(performAsync1(record))
promises.push(performAsync2Retrying)
const responses = await Promise.all(promises)

这使得您的 promises 数组的构造易于通过单一责任阅读。

用更现代的成语来写这个会让好处更清楚:

const performAsync2Retrying = performAsync2(record).catch(()=> performAsync1(record))
const responses = await Promise.all([performAsync1(record),
performAsync2Retrying])

但我在这里真正想做的是避免引入额外的名称和辅助函数,如果第一个函数失败(可以详细说明以处理多个参数),辅助函数会执行第二个函数

const retryWith = (f1, f2, _in) => f1(_in).catch(_=>f2(_in))

const responses = await Promise.all([
performAsync1(record),
retryWith(performAsync2, performAsync1, record)
])

然后我再也不需要考虑处理这种情况了。

关于javascript - 从 Promise 的 catch 添加到现有的 Promises.all 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65347339/

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