Я реализовал логи повторных попыток c для одного вызова 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 из клиентского кода (примерно для 10000 пользователей в целом oop). Однако по какой-то причине, когда вызов API (getUserRecordingStatus) завершается неудачей, поток, кажется, зависает, а не повторяет logi c. В журналах я видел напечатанный оператор retry, но это все. Есть идеи, если я что-то упустил? Спасибо за вашу помощь.
DEMO:
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()