面试官:写一个Promise超时重传叭。

1,453 阅读1分钟

需要注意的点:超时重传有次数限制

Promise.retry

Promise.retry = function (promiseFn, time) {
    return new Promise((resolve, reject) => {
        let fn = function () {
            promiseFn().then(res => {
                resolve(res)
            }).catch(err => {
                if (time > 0) {
                    console.log(`倒数第${time}次重试`);
                    time--;
                    fn()
                } else {
                    console.log('重试次数使用完毕,依然失败');
                    reject(err)
                }
            })
        }
        fn()
    })
}

//测试
let a = function () {
    return new Promise((res, rej) => {
        let num = Math.random() * 10;
        num < 5 ? res('数字小于5,成功') : rej('数字大于5,失败');
    })
}

Promise.retry(a, 3).then(res => {
    console.log(`res:${res}`);
}).catch(err => {
    console.log(`err:${err}`);
})

记录记录!