Javascript 承诺-尝试直到成功

Javascript 承诺-尝试直到成功,javascript,node.js,promise,Javascript,Node.js,Promise,我使用的是native node.js的承诺,这个问题确实给了我任何一点启示。 基本上,我有一个如下函数: var foo = foo (resolve, reject) { return obj .doA() .doB() .then(function (value) { // here I choose if I want to resolve or reject. }) .cat

我使用的是native node.js的承诺,这个问题确实给了我任何一点启示。 基本上,我有一个如下函数:

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函数,只要承诺得到履行;如果被拒绝,请重试

我不知道如何构造链条。有什么帮助吗?
谢谢。

尝试使用递归在
foo
的声明中包含
函数

函数foo(){
var n=String(new Date().getTime()).slice(-1);
//如果'n`<5拒绝'n',否则解决'n'`
退货承诺[n<5?“拒绝”:“解决”](n)
.然后(函数(值){
返回值
//在这里,我选择是要解决还是拒绝。
})
.catch(函数(err){
返回承诺。拒绝([“拒绝”,错误])
});
}
(函数重复(){
var promise=promise.resolve(foo());
回报承诺
.then(功能(数据){
console.log(“完成”,数据)
//我知道这里我必须归还什么。
})
.catch(函数(err){
//我想重复foo函数,直到它被解析并且没有被拒绝。
控制台日志(err);
如果(错误[0]=“拒绝”)重复()
})

}())
你能解释得更清楚些吗?解析和拒绝句柄在哪里?@BrunoBruzzano“解析和拒绝句柄在哪里?”?在
foo
。如果承诺在
foo
被拒绝,则递归调用
repeat
,直到
foo
返回已解决的承诺value@BrunoBruzzano请参阅更新的帖子,包括stacksnippets以演示方法谢谢@guest271314,我会尽快尝试,即使我有疑问。所有这些内容都在一个函数中,该函数必须返回一个承诺的对象——我们称之为“myPromisedObject”。它已经存在,所以不需要创建。我要在哪里还它?我的意思是,立即函数应该返回一些东西?谢谢@guest271314,我用你的解决方案解决了。只要承诺得到履行,只要承诺被拒绝,都是超级相似的。唯一的区别是检查
。catch
。然后
-您可能想问如何将拒绝的承诺转换为履行的承诺,反之亦然。绝对是一个副本。副本中的答案似乎过于复杂,不适合此问题-IMHO-并且无法解决此代码中的一些基本问题,例如,目前不需要此代码中的
新承诺
all@BenjaminGruenbaum副本?在node.js的本机承诺实现之前,我没有看到任何关于循环承诺的问题。请分享一个链接。谢谢,Pfft,复制品已经关闭了,实际上是一样的东西。。。但是如果您必须有完全相同的场景:
const retry=fn=>\u=>fn().catch(retry(fn))
。请避免!