Tôi đang sử dụng Node.js và TypeScript và tôi đang sử dụng async/await
. Đây là trường hợp thử nghiệm của tôi:Hết giờ trong async/await
async function doSomethingInSeries() {
const res1 = await callApi();
const res2 = await persistInDB(res1);
const res3 = await doHeavyComputation(res1);
return 'simle';
}
Tôi muốn đặt thời gian chờ cho chức năng tổng thể. I E. nếu res1
mất 2 giây, res2
mất 0,5 giây, res3
mất 5 giây Tôi muốn có thời gian chờ sau 3 giây để tôi phát hiện lỗi.
Với setTimeout
cuộc gọi bình thường là một vấn đề bởi vì phạm vi bị mất:
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';
}
Và tôi không thể bắt nó với bình thường Promise.catch
:
doSomethingInSeries().catch(function(err) {
// errors in res1, res2, res3 will be catched here
// but the setTimeout thing is not!!
});
Bất kỳ ý tưởng về làm thế nào để giải quyết?
Bạn có đang sử dụng thư viện lời hứa cụ thể không? – Bergi
Không, chỉ là lời hứa tiêu chuẩn. – nkint
Vì vậy, 2 + 0,5 + 5 + 3 làm cho một thời gian chờ là 11,5 giây? – Bergi