如果承诺失败,在nodejs中重做任务,直到达到maxLimit

我有NetowrkIO和networking在这种情况下不可靠的function,所以这里它可能无法在第一次尝试,所以我需要重试,如​​果失败这里是伪代码

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中做到这一点。 我search,并提出了承诺作为一种方式。 但是我不知道如何去做。 这是我的代码。

 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(); } } 

受这个答案的启发,可以通过在最后附加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);