是否有可能克隆ES6承诺?

时间:2016-08-19 18:22:06

标签: javascript node.js es6-promise

我试图创建一个通用"重试"接受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
    })
  }




1 个答案:

答案 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);
  }();
}