承诺 - 尝试,直到它成功

问题描述:

我使用本地node.js的承诺和问题here确实给了我任何一点。 基本上,我有一个功能象下面这样:承诺 - 尝试,直到它成功

var foo = foo (resolve, reject) { 
    return obj 
     .doA() 
     .doB() 
     .then(function (value) { 
      // here I choose if I want to resolve or reject. 
     }) 
     .catch(function(err) { 
     }); 
} 

var promise = new Promise(foo); 

return promise 
    .then(function() { 
     // I know here what I have to return. 
    }) 
    .catch(function(err){ 
     // I want to repeat the foo function until it is resolved and not rejected. 
    }) 

obj是许诺对象。只要履行诺言,我就想重试foo函数;如果它被拒绝,那么再试一次。

我不知道如何构建链。任何帮助? 谢谢。

+1

只要承诺得到满足,并且只要承诺被拒绝是_super_相似。唯一的区别是检查'.catch'和'.then' - 你可能想要问如何将被拒绝的承诺转换为履行的承诺,反之亦然。肯定是重复的。 –

+0

在这个重复的答案似乎是复杂的方式,不适合这个问题 - 恕我直言,并没有解决这个代码的一些基本问题,例如,在这个代码中根本不需要'new Promise' –

+0

@BenjaminGruenbaum重复的?在使用node.js的本地Promise完成之前,我没有看到任何有关循环承诺的问题。请分享链接。谢谢。 –

尝试包括functionfoo声明,使用递归

function foo() { 
 

 
    var n = String(new Date().getTime()).slice(-1); 
 
    // if `n` < 5 reject `n` , else resolve `n` 
 
    return Promise[n < 5 ? "reject" : "resolve"](n) 
 
    .then(function(value) { 
 
     return value 
 
     // here I choose if I want to resolve or reject. 
 
    }) 
 
    .catch(function(err) { 
 
     return Promise.reject(["rejected", err]) 
 
    }); 
 
} 
 

 
(function repeat() { 
 
    var promise = Promise.resolve(foo()); 
 

 
    return promise 
 
    .then(function(data) { 
 
     console.log("complete", data) 
 
     // I know here what I have to return. 
 
    }) 
 
    .catch(function(err) { 
 
     // I want to repeat the foo function until it is resolved and not rejected. 
 
     console.log(err); 
 
     if (err[0] === "rejected") repeat() 
 
    }) 
 
}())

+1

你能解释一下吗?解决和拒绝手柄是哪里? –

+0

@BrunoBruzzano _“解析和拒绝句柄是?”_?在'foo'。如果promise在'foo'处被拒绝,则递归调用'repeat'直到'foo'返回一个已解决的承诺值 – guest271314

+0

@BrunoBruzzano查看更新后的帖子,包含stacksnippets以演示方法 – guest271314