Skip to content

封装带有超时(重试)机制的异步请求工具函数 #177

@TieMuZhen

Description

@TieMuZhen
//模拟请求逻辑
function asyncRequest(){
    return new Promise((resolve, reject) => {
        if(1){
            reject('reject');
        }else{
            resolve('resolve');
        }
    })
}

/**
 * 
 * @param {Promise} asyncRequest 需要重试的函数
 * @param {number} times 重试次数
 * @param {number} delay 多久后进行下一次重试
 * @returns {Promise}
 */
function reTry(asyncRequest, time, delay){
    return asyncRequest().catch(async err => {
        if(--time){
            await new Promise((resolve) => {
                setTimeout(resolve, delay);
            })
            return reTry(asyncRequest, time, delay);
        }else{
            throw '请求失败' + err;
        }
    })
}

reTry(asyncRequest, 3, 2000).then(value => {
    console.log(value + "成功");
}, err => {
    console.log(err + "失败");
})

输出

reject 3
reject 2
reject 1
请求失败reject失败

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions