Jestem z Node.js i TypeScript i używam async/await
. To jest mój przypadek testowy:Limit czasu w async/poczekaj na
async function doSomethingInSeries() {
const res1 = await callApi();
const res2 = await persistInDB(res1);
const res3 = await doHeavyComputation(res1);
return 'simle';
}
Chciałbym ustawić limit czasu dla ogólnej funkcji. To znaczy. jeśli res1
trwa 2 sekundy, res2
trwa 0,5 sekundy, res3
trwa 5 sekund Chciałbym mieć timeout, że po 3 sekundach pozwolę sobie rzucić błąd.
Przy normalnym setTimeout
rozmowy jest problemem, ponieważ zakres jest stracone:
async function doSomethingInSeries() {
const timerId = setTimeout(function() {
throw new Error('timeout');
});
const res1 = await callApi();
const res2 = await persistInDB(res1);
const res3 = await doHeavyComputation(res1);
clearTimeout(timerId);
return 'simle';
}
I nie mogę złapać go z normalnego Promise.catch
:
doSomethingInSeries().catch(function(err) {
// errors in res1, res2, res3 will be catched here
// but the setTimeout thing is not!!
});
Wszelkie pomysły, jak rozwiązać?
Czy używasz konkretnej biblioteki obietnicy? – Bergi
Nie, tylko standardowa obietnica. – nkint
Więc 2 + 0,5 + 5 + 3 powoduje, że czas oczekiwania wynosi 11,5 sekundy? – Bergi