簡體   English   中英

在異步/等待捕獲處理程序中使用 Promise.reject()

[英]Using Promise.reject() in async/await catch handler

我只是想知道使用以下代碼是否是一個好習慣:

   const myFun = async () => {
     try {
         const response = await api();
         if(response.status === 200) {
            return response.data;
         }
      } catch(err) {
         return Promise.reject(err);
      }
   }

這里myFun將返回一個已解決/拒絕的 Promise,它將被另一個 function 捕獲。我只是想知道這是正確的方法還是有其他選擇?

嘗試從api()重新拋出錯誤將一事無成。

使用async function 將導致Promise.reject(error)在拋出錯誤時隱式調用。

像這樣寫你的 function:

const myFun = async () => {
     const response = await api();
     if (response.status === 200) {
          return response.data;
     }
     // You might want to return something else here
}

那么調用function還是會報錯:

try {
    await myFun();
} catch (error) {
    // error still received
}

你正在做的是混合 async/await 和 Promises。 您可以從 catch 塊中throw err

const myFun = async () => {
     try {
         const response = await api();
         if(response.status === 200) {
            return response.data;
         }
      } catch(err) {
         throw err;
      }
   }

在此之后,您可以在任何調用myFun的地方捕獲錯誤。

兩種情況的最終結果都是一樣的。 唯一的區別是throw可以在 JS 代碼的任何地方使用,但是Promise.reject只能在異步代碼塊中調用

暫無
暫無

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

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