假设有一个异步获取数据的请求每次都在500ms后失败, 报错“server unavailable”。
function fetchData() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
reject('server unavailable');
}, 500);
});
};
假设我们最多重试3次就不再尝试发送该请求,每次重试间隔100ms。
// parameter #1, the function to return a Promise
// parameter #2, the max retry times
// parameter #3, the delay between each attempt
retry(fetchData, 3, 100)
retry函数参数已确定,函数体具体实现如下:
retry = function(fn, times, delay) {
var err = null;
return new Promise(function(resolve, reject) {
var attempt = function() {
fn().then(resolve).catch(function(err) {
console.log(`Attempt #${times} failed`);
if (0 == times) {
reject(err);
} else {
times--;
setTimeout(function(){
attempt()
}, delay);
}
});
};
attempt();
});
};
因篇幅问题不能全部显示,请点此查看更多更全内容