【发布时间】:2015-08-13 09:22:23
【问题描述】:
我真的希望有人能帮助我解决这个问题,尽管我无法(保密问题)分享太多信息。基本上,我编写了这个函数来重试失败的承诺:
function retryOnFailure(func) {
return func().then(function(resp) {
return resp
}, function(err) {
return setTimeout(function() {
return retryOnFailure(func)
}, 5000)
}
)}
然后我有这段代码可以使用它:
function getStuff() {
return $.get('/some/endpoint')
}
retryOnFailure(getStuff).then(function(res) { console.log(res) })
现在递归重试函数工作正常,但如果在retryOnFailure 中遇到错误情况,我在最后一行代码中的then 不会触发。我知道原因是因为每个递归调用都会创建一个新的承诺,所以我在最后一行中听到的承诺与得到解决的承诺不同,但我很难弄清楚如何解决这个问题。我希望这个函数是一个通用的重试函数,因此不想处理该方法的实际成功,但我没有看到任何其他方式。任何帮助将不胜感激!
【问题讨论】:
标签: javascript jquery promise deferred