繼續重試的模式,直到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);
承諾重試設計模式
慕森卡
2019-09-02 08:17:29