首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以克隆ES6 promise吗?

可以克隆ES6 promise吗?
EN

Stack Overflow用户
提问于 2016-08-20 02:22:06
回答 1查看 1.9K关注 0票数 3

我正在尝试创建一个通用的"retry“函数,它接受一个promise对象,并在最终解析或拒绝之前将promise回放一定次数。

我已经编写了一段代码,它接受一组promises并按顺序执行它们,直到一个成功,或者它们都失败。

代码语言:javascript
复制
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对象一起工作。

我意识到我可以只接受一个正在执行的函数并自己构建承诺,但我希望能够在项目中重用我已经简化的函数。

代码语言:javascript
复制
var retry = function(promise, maxCount){
    return first(Array(maxCount).fill(function(){
        //return a deep copy of the promise passed in
    })
  }

EN

回答 1

Stack Overflow用户

发布于 2016-08-20 02:49:03

你创建承诺的“深度克隆”的方法是有缺陷的,无论这意味着什么,并通过它们来玩。重试承诺的范例并不比

代码语言:javascript
复制
function foo() {
  return doSomething().catch(foo);
}

然后添加重试次数的逻辑:

代码语言:javascript
复制
function retry(n) {
  return function foo() {
    if (!n--) return Promise.reject("max retries exceeded");
    return doSomething.catch(foo);
  }();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39045512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档