我已经为一个API调用实现了重试逻辑,如下所示:
private async fetchRecordingStatus(user: User): Promise<RecordingStatus[]> {
const rs: RecordingStatus[] = [];
let noOfRetries = 10;
while (noOfRetries >= 0) {
try {
const userLineRecordingStatus = await this.getUserRecordingStatus(user.userid);
this.logger.log(`Preparing recording config status of userid: ${hrUser.userid}`);
// some processing
break;
} catch (err) {
if (noOfRetries === 0) {
throw err;
} else {
this.logger.log(`Retry preparing recording config status of user: ${user.userid}`);
noOfRetries -= 1;
// wait for 2 seconds before trying
await new Promise(r => setTimeout(r, 2000));
}
}
}
return rs;
}
在上面的代码中,我从客户端代码中调用 fetchRecordingStatus 方法(一个循环中大约有10,000个用户)。但是由于某种原因,当API调用(getUserRecordingStatus)失败时,流程似乎挂起,而不是重试逻辑。在日志中,我可以看到一次打印了retry语句,仅此而已。有什么想念的东西吗?感谢您的帮助。
演示:
async function fetchRecordingStatus(user) {
const rs = [];
let noOfRetries = 5;
while (noOfRetries >= 0) {
try {
const userLineRecordingStatus = await Promise.reject(new Error('fail'));
console.log(`Preparing recording config status of userid:`);
// some processing
break;
} catch (err) {
if (noOfRetries === 0) {
throw err;
} else {
console.log(`Retry preparing recording config status of user: `);
noOfRetries -= 1;
// wait for 2 seconds before trying
await new Promise(r => setTimeout(r, 2000));
}
}
}
return rs;
}
fetchRecordingStatus()