javascript - 在 nodejs 中重做任务,如果 promise 失败直到达到 maxLimit

标签 javascript node.js promise q

我有做 NetowrkIO 的功能,在这种情况下网络不可靠,所以在这里它可能在第一次尝试时不起作用,所以如果失败我需要重试 这是它的伪代码

count = 0
maxLimit = 10
success = false
while ( (success == false) && (count < maxLimit))
{
    try 
    {
        doNetworkIO(arg)
        success = true
    }
    catch(ex)
    {
        count += 1
    }
}

if( success == true )
{
    reportSuccess()
} else {
    reportFailure()
}

现在我正尝试在 nodejs 中做这件事。我搜索并提出了 promise 作为一种实现方式。但我不知道如何。 这是我的代码。

var count = 0
var maxLimit = 10
doNetworkIO(arg)
    .then(reportSuccess)
    .catch(function () {
        if(count < maxLimit)
        {
            count += 1
            // => redo operation if count < limit
            // => help needed here
        }
        else {
            reportFailure()
        }
    })

这里我不确定是否要重做一次。

如果您有不同的任务方法,请分享。

最佳答案

您可以编写一个重试函数,它将自身附加到失败处理程序中,如下所示

var count = 0;
var maxLimit = 10;

function tryNetworkIO() {
    if (count < maxLimit) {
        count += 1;
        return doNetworkIO(arg).then(reportSuccess).catch(tryNetworkIO);
    } else {
        reportFailure();
    }
}

灵感来自 this answer ,您可以稍微改进一下,方法是在最后仅附加一次 reportSuccess,当 promise 真正解决时,就像这样

var count = 0;
var maxLimit = 10;

function tryNetworkIO() {
    if (++count < maxLimit) {
        return doNetworkIO(arg).catch(tryNetworkIO);
    } else {
        throw new Error('Exceeded maximum number of retries');
    }
}

tryNetworkIO().then(reportSuccess).catch(reportFailure);

关于javascript - 在 nodejs 中重做任务,如果 promise 失败直到达到 maxLimit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30936482/

相关文章:

mysql - 在 Node.js 中使用 mysql 和 Promise

javascript - Cloud Functions - Cloud Firestore 错误 : can't get serverTimestamp

javascript - 链接多个Node http请求

javascript - 如何动态添加谷歌地图信息窗口?

node.js - 如何递归安装 npm devdependencies?

javascript - Electron:项目在启动脚本时失败

javascript - jQuery promise 出现意外的 "then"调用顺序

javascript - Passport-github js,用户代理错误

javascript - 捕获错误,但不退出应用程序 - NodeJS

javascript - 无法使用 Promise 通过 bind() 获取正确的上下文