为了账号安全,请及时绑定邮箱和手机立即绑定

承诺重试设计模式

承诺重试设计模式

慕森卡 2019-09-02 08:17:29
继续重试的模式,直到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);
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 589 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信