跳到主要内容

bolawen

2024年04月09日
柏拉文
越努力,越幸运

一、认识


请求重试, 实现了对任务的重试逻辑(默认重试 3 次), 并加入指数退避, 每次重试等待更长时间, 以降低连续重试带来的压力

二、实现


function request() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject("ok");
}, 3000);
});
}

function wait(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}

function requestWithRetry(data, retries = 3) {
return new Promise((resolve, reject) => {
function attempt(remaining) {
request(data)
.then(resolve)
.catch(async (err) => {
if (remaining > 0) {
await wait(1000 * (retries - remaining + 1));
console.log(
`⚠️ 任务 ${data} 失败,正在重试 (${
retries - remaining + 1
}/${retries})...`
);

attempt(remaining - 1);
} else {
reject(err);
}
});
}
attempt(retries);
});
}

三、测试


requestWithRetry(3, 500)
.then(res => {
console.log('res', res);
})
.catch(error => {
console.log('error', error);
});