失败后重新开始承诺

Restart a promise after fail

本文关键字:承诺 重新开始 失败      更新时间:2023-09-26

我使用Nodejs和Q来运行一系列异步函数。如果其中一个失败,我想运行另一个函数,然后重新启动序列。如下所示:

var promise = database.getUserCookies(user)
    .then(function (data){
        return proxy.search(data);
    })
        .fail(function (data) {
            if (data.rejected === 302) {
                var relogin = database.fetchAuth(data)
                    .then(function (data) {
                        return proxy.login(data)
                    })
                    .then(function (data){
                        return database.saveCookies(data);
                    })
                    .then(function (data){
                        //Restart the promise from the top.
                    })
            }
        })
    .then(function (data){
        return responser.search(data);
    })

您需要将其封装在一个可以再次调用的函数中。承诺本身不能"重新启动"。

var promise = (function trySearch() {
    return database.getUserCookies(user)
    .then(proxy.search)
    .fail(function(err) {
        if (err.rejected === 302) { // only when missing authentication
            return database.fetchAuth(data)
//          ^^^^^^
            .then(proxy.login)
            .then(database.saveCookies)
            .then(trySearch) // try again
        } else
            throw err;
    })
}())
.then(responser.search)