继续重试的模式,直到promise解析(使用delay和maxRetries)。继续重试的模式,直到条件满足结果(使用delay和maxRetries)。具有无限重试的内存高效动态模式(提供延迟)。代码为#1。继续重试,直到诺言解决(语言的任何改进社区等?)Promise.retry = function(fn, times, delay) { return new Promise(function(resolve, reject){ var error; var attempt = function() { if (times == 0) { reject(error); } else { fn().then(resolve) .catch(function(e){ times--; error = e; setTimeout(function(){attempt()}, delay); }); } }; attempt(); });};使用work.getStatus() .then(function(result){ //retry, some glitch in the system return Promise.retry(work.unpublish.bind(work, result), 10, 2000); }) .then(function(){console.log('done')}) .catch(console.error);#2的代码继续重试,直到条件then以可重用的方式满足结果(条件是变化的)。work.publish() .then(function(result){ return new Promise(function(resolve, reject){ var intervalId = setInterval(function(){ work.requestStatus(result).then(function(result2){ switch(result2.status) { case "progress": break; //do nothing case "success": clearInterval(intervalId); resolve(result2); break; case "failure": clearInterval(intervalId); reject(result2); break; } }).catch(function(error){clearInterval(intervalId); reject(error)}); }, 1000); }); }) .then(function(){console.log('done')}) .catch(console.error);
添加回答
举报
0/150
提交
取消