承诺 - 尝试,直到它成功
我使用本地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函数;如果它被拒绝,那么再试一次。
我不知道如何构建链。任何帮助? 谢谢。
尝试包括function
在foo
声明,使用递归
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()
})
}())
你能解释一下吗?解决和拒绝手柄是哪里? –
@BrunoBruzzano _“解析和拒绝句柄是?”_?在'foo'。如果promise在'foo'处被拒绝,则递归调用'repeat'直到'foo'返回一个已解决的承诺值 – guest271314
@BrunoBruzzano查看更新后的帖子,包含stacksnippets以演示方法 – guest271314
只要承诺得到满足,并且只要承诺被拒绝是_super_相似。唯一的区别是检查'.catch'和'.then' - 你可能想要问如何将被拒绝的承诺转换为履行的承诺,反之亦然。肯定是重复的。 –
在这个重复的答案似乎是复杂的方式,不适合这个问题 - 恕我直言,并没有解决这个代码的一些基本问题,例如,在这个代码中根本不需要'new Promise' –
@BenjaminGruenbaum重复的?在使用node.js的本地Promise完成之前,我没有看到任何有关循环承诺的问题。请分享链接。谢谢。 –