我正在尝试创建一个通用的"retry“函数,它接受一个promise对象,并在最终解析或拒绝之前将promise回放一定次数。
我已经编写了一段代码,它接受一组promises并按顺序执行它们,直到一个成功,或者它们都失败。
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);
});
我现在正在尝试编写一个函数,它接受一个promise,并用promise的深拷贝克隆填充一个大小为N的数组。我已经设法让它与普通对象一起工作,但我似乎不能让它与promise对象一起工作。
我意识到我可以只接受一个正在执行的函数并自己构建承诺,但我希望能够在项目中重用我已经简化的函数。
var retry = function(promise, maxCount){
return first(Array(maxCount).fill(function(){
//return a deep copy of the promise passed in
})
}
发布于 2016-08-20 02:49:03
你创建承诺的“深度克隆”的方法是有缺陷的,无论这意味着什么,并通过它们来玩。重试承诺的范例并不比
function foo() {
return doSomething().catch(foo);
}然后添加重试次数的逻辑:
function retry(n) {
return function foo() {
if (!n--) return Promise.reject("max retries exceeded");
return doSomething.catch(foo);
}();
}https://stackoverflow.com/questions/39045512
复制相似问题