[英]How to do error handling with async/await without having to await
看下面這個人為的例子:
const housekeepingStuff = async function (data) {
const result = await notImportant(data);
result.more = 'yawn';
storeInDatabase(result);
};
const getStuff = async function () {
try {
const data = await getData();
data.extra = 'wow';
housekeepingStuff(data); // <---- don't want to await... but need to for error catching
return Promise.resolve(data);
} catch (err) {
return Promise.reject(err);
}
};
try {
const myData = await doSomeStuff();
res.send(myData);
} catch (err) {
console.log(err);
res.sendStatus(400);
}
我想盡快從getStuff ()
返回數據,而無需等待housekeepingStuff()
但如果我不等待該函數,那么我就有一個未捕獲的錯誤。
我可以在getStuff()
函數之外調用housekeepingStuff()
,在獲取數據並將其發送給任何想要它的人之后:
try {
const myData = await doSomeStuff();
res.send(myData);
await housekeepingStuff(data); // <---- am awaiting but who cares because nothing follows
} catch (err) {
console.log(err);
res.sendStatus(400);
}
但這似乎不對,因為我不想每次調用doSomeStuff()
時都必須記住調用housekeepingStuff()
doSomeStuff()
......理想情況下應該“內部”處理它。
這里的正確方法是什么?
承諾(或異步)函數有兩種可能的結果:
要獲得任何結果,您必須等待它。 你不能等待一個條件而不是另一個,因為整個事情都需要執行,這樣你才能知道結果是什么。
否則,您實際上是在問 javascript 引擎:請為我預測該函數是否會失敗,如果失敗,請等待它。
因此,正確的方法是等待它。
但是,如果您不關心此函數的成功或失敗結果,只需通過另一個處理所有錯誤的異步函數調用該函數:
async function doSomeStuffAndIgnoreError() {
try {
await doSomeStuff();
} catch (e) {
console.error(e);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.