Javascript ES6-不断发出承诺,直到它不递归地解决为止
我有一个promise p,它检查服务器上的一个条件(电子邮件已验证) p可以解析->电子邮件验证 或失败->代码电子邮件未验证 或失败->代码有其他错误(电子邮件不存在等) 我想创建另一个promise WaitP,它将等待p解决或失败,代码不是电子邮件未验证 因此,WaitP做到了:Javascript ES6-不断发出承诺,直到它不递归地解决为止,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我有一个promise p,它检查服务器上的一个条件(电子邮件已验证) p可以解析->电子邮件验证 或失败->代码电子邮件未验证 或失败->代码有其他错误(电子邮件不存在等) 我想创建另一个promise WaitP,它将等待p解决或失败,代码不是电子邮件未验证 因此,WaitP做到了: 问题p 如果p解析,则解析WaitP 如果p失败且代码电子邮件未验证,则返回1(再次发布p) 如果p失败而代码不是电子邮件未验证,则失败WaitP 我怎么能写这样的承诺 我希望能找到一个没有递归的解决方案 谢谢
谢谢 只需从
catch
处理程序递归调用函数:
function waitP() {
return P().catch(function(err) {
if (err.code == "email unverified")
return waitP(); // try again
else
throw err;
});
}
不过,您可能希望为递归调用添加一个计数器或延迟,以便在
p()
快速且反复地无限失败时,您的进程不会挂起。有帮助吗?您是否检查过?两者都使用递归,可以避免吗?您是否可以证明不需要递归。在递归非常适合的任务中不使用递归似乎很愚蠢。用户可能会在几天内无法验证他的电子邮件example@kofifus:递归绝对没有错。异步回调中没有堆栈。没有堆栈吗?你怎么能解释?我以为每次函数调用都会在stack@kofifus异步回调是用它们自己的堆栈创建的waitP
不是由waitP
直接调用的,而是从promise回调调用的。好的,但是这个promise回调不容易溢出吗?假设用户等待2天来验证电子邮件,P每500毫秒运行一次。从技术上讲,这甚至不是递归。