我有一些代码如下。有没有简单的方法让它尝试端点3次,然后最终放弃并将其发送到catch块?最后一个代码块将是一个未经测试的尝试,但我想知道是否有更合适的方法来处理这个问题。
此文件与react移动的和web共享。我正在使用web端,不想更改此文件。
import { AxiosResponse } from 'axios';
import { HttpClient } from '../..';
export function postTeam({
userId,
}: {
userId: number;
}): Promise<AxiosResponse<TeamDetail>> {
return HttpClient.post(
`teams`,
{
user: {
id: userId,
},
},
{
headers: {
'content-type': 'application/json',
},
},
);
}
还有一个文件,它像这样调用这个代码。这是我想做的更改,因为这只是在代码的Web端...
postTeam({
userId: user.id,
})
.then(() => {
//Do something
})
.catch((errors) => {
console.log(errors);
trackApiError(new Error(errors));
})
.finally(() => setIsSubmitting(false));
我的尝试:
for(let x = 0; x < 3; x++) {
let success = false;
postTeam({
userId: user.id,
})
.then(() => {
success = true;
})
.catch((errors) => {
if(x >= 2) {
console.log(errors);
trackApiError(new Error(errors));
}
})
.finally(() => {
setIsSubmitting(false);
success = true;
})
if(success) break;
}
1条答案
按热度按时间bxgwgixi1#
我将稍微宽泛地回答这个问题,但仍然可以很容易地应用于您的情况。我将回答的是,当失败意味着抛出错误时,如何重试某个操作。
这是我个人可能会这样做,因为它意味着稍微少计算。我敢打赌,许多人会不同意我,虽然说优化是微不足道的,我会同意他们,所以这可能是一个简单的方法,可读性明智。