ES6 - 继续发出一个承诺,直到它在没有递归的情况下结算

时间:2016-06-17 08:45:48

标签: javascript promise es6-promise

我有一个承诺P,用于检查服务器上的状况(已验证电子邮件)。

P可以解析 - >已验证电子邮件

或失败 - >未经验证的代码电子邮件

或失败 - >代码其他错误(电子邮件不存在等)

我想创建另一个承诺WaitP,它将等待P解析或失败,并使用未经验证的电子邮件以外的代码。

所以WaitP会:

  1. 问题P

    如果P结算,请解决WaitP

    如果P未通过代码电子邮件验证,请返回1(再次发出P)

    如果P使用未经验证的电子邮件以外的代码失败,则WaitP

  2. 失败

    我怎么写这样的承诺?

    我希望解决方案没有递归。

    THX!

1 个答案:

答案 0 :(得分:3)

只需从catch处理程序中递归调用您的函数:

function waitP() {
    return P().catch(function(err) {
        if (err.code == "email unverified")
            return waitP(); // try again
        else
            throw err;
    });
}

您可能希望在递归通话中添加计数器或延迟,这样,如果P()快速重复无效,您的流程就不会挂起。