gpt4 book ai didi

javascript - 重试 promise 步骤

转载 作者:行者123 更新时间:2023-11-29 16:02:54 28 4
gpt4 key购买 nike

假设我有以下 Promise 链:

var result = Promise.resolve(filename)
.then(unpackDataFromFile)
.then(transformData)
.then(compileDara)
.then(writeData);

现在我不止一个transformData函数可是两个或多个,存储在一个数组中。我想尝试第一个,如果 compileData函数失败,尝试第二个,依此类推直到compileData成功或 transformData 的数组功能已用尽。

谁能给我一个关于如何实现这个的例子?

运行所有 transformData函数并将结果数组提供给compileData不是一个选项,因为这些功能非常昂贵,我想运行尽可能少的功能。

transformData如果有帮助,它本身也会返回一个 Promise。

最佳答案

我首先将尝试多个 promise 直到一个成功的概念隔离开来:

function tryMultiple([promise, ...rest]) {
if (!promise) throw new Error("no more to try");
return promise.catch(() => tryMultiple(rest));
}

现在编写一个处理程序来尝试转换和编译的每种组合:

function transformAndCompile(transformers) {
return function(data) {
return tryMultiple(transformers.map(t => t(data).then(compileData)));
};
}

现在顶层就是:

var result = Promise.resolve(filename)
.then(unpackDataFromFile)
.then(transformAndCompile(transformers))
.then(writeData);

顺便说一句,Promise.resolve(filename).then(unpackDataFromFile) 只是 unpackDataFromFile(filename) 的一种迂回说法。

关于javascript - 重试 promise 步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37993365/

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