const fn = () => { const r = Math.random(); return new Promise((resolve, reject) => { r > 0.9 ? setTimeout(resolve, 100, r) : setTimeout(reject, 100, r); }); }; const promiseRetry = (fn, count) => { return new Promise(async (resolve, reject) => { for (let i = 1; i <= count; i++) { try { const res = await fn(); console.log(res); resolve("success"); break; } catch (e) { console.log(e); if (i === count) { console.log("now reject"); return reject(e); } } } }); }; // 这个函数的作用是,本来fn这个 promise 100ms可能就要reject了,但是如果套了一层promise,让reject的时候先判断是否到达次数,循环够次数再reject。现实场景是失败重新请求,多请求几次再reject。 promiseRetry(fn, 10) .then(e => { console.log(e); }) .catch(e => { console.log(e); });
promise.retry
于 2024-09-24 10:16:24 首次发布