簡體   English   中英

如何使用 async/await 進行錯誤處理而不必等待

[英]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() ......理想情況下應該“內部”處理它。

這里的正確方法是什么?

承諾(或異步)函數有兩種可能的結果:

  1. 一個成功的結果
  2. 錯誤結果

要獲得任何結果,您必須等待它。 你不能等待一個條件而不是另一個,因為整個事情都需要執行,這樣你才能知道結果是什么。

否則,您實際上是在問 javascript 引擎:請為我預測該函數是否會失敗,如果失敗,請等待它。

因此,正確的方法是等待它。

但是,如果您不關心此函數的成功或失敗結果,只需通過另一個處理所有錯誤的異步函數調用該函數:

async function doSomeStuffAndIgnoreError() {
   try {
     await doSomeStuff();
   } catch (e) {
     console.error(e);
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM