我试图创建一个通用"重试"接受promise对象并在最终解析或拒绝之前将响应播放一定次数的函数。
我已经编写了一段接受一系列承诺的代码,并按顺序通过它们直到1次成功或者它们都失败了。
var first = function(promiseArr){
return promiseArr.reduce(function (prev, next) {
return prev.catch(()=>next)
});
};
first([Promise.reject("1"), Promise.resolve("2"), Promise.reject("3")])
.then(function(data){
console.log('resolved with '+data);
}, function(err){
console.log('rejected with '+err);
});

我现在正在尝试编写一个接受承诺的函数,并使用大小为N的数组填充promise的深拷贝克隆。我设法让它与vanilla对象一起工作,但我似乎无法使它与promise对象一起工作。
我意识到我可以接受一个执行函数并自己构建承诺,但我希望能够在项目中重用已经实现的函数。
var retry = function(promise, maxCount){
return first(Array(maxCount).fill(function(){
//return a deep copy of the promise passed in
})
}

答案 0 :(得分:3)
你创造一个承诺的“深层克隆”的方法,无论它应该是什么意思,并通过它们玩,都是有缺陷的。重试承诺的范式并不比
复杂function foo() {
return doSomething().catch(foo);
}
然后为重试次数添加逻辑:
function retry(n) {
return function foo() {
if (!n--) return Promise.reject("max retries exceeded");
return doSomething.catch(foo);
}();
}