我有一个我在网络视图中实施的Android应用。我的应用程序的一个基本部分是我有一个重试某些API调用的队列(队列存在,因为它们需要按顺序发生,但网络条件并不总是可靠的,所以我必须在它失败时重试。)
以下代码显示了我的基本知识:我调用API,如果成功,我将删除作业并转到队列中的下一个作业;否则我记录错误,等待5秒,然后再尝试处理它。
return callAPI(job.parameters).then(function(result){
_queue._removeJob(job.id);
processNext();
}).catch(function(e){
// need to be able to tell the difference between a NETWORK error and an API error
// retry later on NETWORK error
// record all other errors, along with the parameters
Logger.log('API error', e);
setTimeout(processNext,5000)
})
我的队列系统在99%的时间内正常工作,但有时由于某种原因,承诺永远不会在.then或.catch中结束,所以' processNext'永远不会被召唤。
我很高兴可能会使用Promise.race()来设置错误并进入.catch的超时条件,但我担心应用程序不在手机上的情况会发生什么;焦点 - 当应用程序在后台时,此队列会发生什么?有没有更合适的方法来运行此队列?我应该设置一些外部setInterval
以定期检查队列是否按预期运行,并且如果它没有在2分钟内消失则再次启动它?