promise实现多次超时重传

文章介绍了如何在JavaScript中使用async/await和Promise实现一个函数fun,该函数带有随机失败机制。tiaoyong函数通过重试处理可能的Promisereject,直至达到最大次数或遇到特定错误。
function fun() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            var x = Math.random();
            if (x > 0.7) 
                resolve(x);
            else
                reject('new error');
        }, 500);
    });
}

async function tiaoyong(times) {
    while (times--) {
        try {
            const res = await fun();
            console.log('cheng', res);
            return res; // 成功返回结果
        } catch (error) {
            console.log('fail', error);
        }
        if (!times)
            throw new Error('quanbu shibai');
    }
}

tiaoyong(3).catch(error => {
    console.log(error.message);
});

首先,定义了一个名为 fun 的函数,该函数返回一个 Promise 对象。这个 Promise 在一个 setTimeout 函数内部,500 毫秒后会执行。在 setTimeout 内部,生成一个随机数 x,如果 x 大于 0.7,则调用 resolve 方法并传递 x,否则调用 reject 方法并传递一个字符串 'new error'

然后,定义了一个名为 tiaoyong 的函数,它接受一个参数 times,表示重试次数。在这个函数内部,使用了一个 while 循环,循环次数由参数 times 决定。在每次循环中,使用 try...catch 块来捕获 fun 函数返回的 Promise 对象。如果 fun 函数执行成功(即 resolve 被调用),则打印 'cheng'res(即 fun 返回的随机数),然后返回 res。如果 fun 函数执行失败(即 reject 被调用),则打印 'fail'error(即 reject 接收到的错误信息)。如果重试次数用完(即 times 为 0),则抛出一个 Error 对象,其中包含 'quanbu shibai' 的错误消息。

最后,调用了 tiaoyong 函数,传入了参数 3,表示重试 3 次。如果所有重试都失败,会捕获到 Error 对象,并打印出其错误消息。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值