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 对象,并打印出其错误消息。
文章介绍了如何在JavaScript中使用async/await和Promise实现一个函数fun,该函数带有随机失败机制。tiaoyong函数通过重试处理可能的Promisereject,直至达到最大次数或遇到特定错误。
983

被折叠的 条评论
为什么被折叠?



