私はNode.jsとTypeScriptを使用していますが、async/await
を使用しています。 これは私のテストケースである:非同期/待機のタイムアウト
async function doSomethingInSeries() {
const res1 = await callApi();
const res2 = await persistInDB(res1);
const res3 = await doHeavyComputation(res1);
return 'simle';
}
私は全体的な機能のためのタイムアウトを設定したいと思います。私。 res1
が2秒かかる場合、res2
は0.5秒かかります。res3
は5秒かかります。3秒後にエラーが発生するようにタイムアウトしたいと思います。スコープが失われるため、通常のsetTimeout
コールで
は問題です:
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';
}
そして、私は通常のPromise.catch
でそれをキャッチすることはできません。
doSomethingInSeries().catch(function(err) {
// errors in res1, res2, res3 will be catched here
// but the setTimeout thing is not!!
});
解決する方法上の任意のアイデアを?
特定の約束ライブラリを使用していますか? – Bergi
いいえ、ただの約束です。 – nkint
2 + 0.5 + 5 + 3は11.5秒のタイムアウトになりますか? – Bergi