Javascript ES6-不断发出承诺,直到它不递归地解决为止

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 我怎么能写这样的承诺 我希望能找到一个没有递归的解决方案 谢谢

我有一个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毫秒运行一次。从技术上讲,这甚至不是递归。