抓塊不會被解雇

我有一個API的異步調用,其中第二個.catch塊沒有被執行。

首先,我在utils文件中定義了主API調用函數,如下所示:

   const getCustomer= (body) => {
    return new Promise(resolve => {
      fetch('/getCustomer', {
        method: 'post',
        body: JSON.stringify(body),
        headers: {
            Accept: "application/json"
            Content-type: "application/json"
-       },
      })
      .then(response => response.json())
      .then(json => resolve(json))
      .catch(err => console.log('error happened', err))
    })
  };

稍后在我的JSX文件中,我通過導入上面的函數來調用API。

getCustomer(myPayload).then(res => {
 setCustomer(res)
}).catch(err => {
 setShowError(true)
})

我試圖用setShowError顯示錯誤消息,但由于某種原因,我只能看到從utils文件夾拋出的console.log('error happened', err),在那里我定義了fetch函數。有沒有關于如何修復此行為并執行catch函數的想法

? 最佳回答:

如果希望兩個.catch都執行,則需要在第一個內拋出,否則結果將是getCustomer將始終返回一個解析的承諾。您還需要對Promise構造函數使用reject參數。

new Promise((resolve, reject) => {
    // ...
    .catch(err => {
        console.log('error happened', err);
        reject(err);
    })

并確保以React代碼返回承諾調用:

return setCustomer(res);

雖然這是可能的,但如果可行,通常更好的方法是不捕獲下面的錯誤,而是讓調用方處理它。也不要使用顯式承諾構造反模式。

   const getCustomer= (body) => {
    return fetch('/getCustomer', {
        method: 'post',
        body: JSON.stringify(body),
        headers: {
            Accept: "application/json"
            Content-type: "application/json"
-       },
      })
      .then(response => response.json());
  };

這是我想要的。除非您真的需要setCustomer本身來處理它,否則就讓錯誤滲透到它的調用者。

主站蜘蛛池模板: 成人日韩熟女高清视频一区| 亚洲一区二区三区高清| 日韩A无码AV一区二区三区 | 日韩精品无码人妻一区二区三区| 无码一区18禁3D| 国产精品成人一区无码| 日本一区二区三区久久| 日韩综合无码一区二区| 久久一区二区三区精品| 波多野结衣一区二区三区 | 无码精品人妻一区二区三区免费| 国产SUV精品一区二区88L| 中文字幕日韩人妻不卡一区 | AV天堂午夜精品一区二区三区| 精品久久久久久中文字幕一区| 爆乳熟妇一区二区三区| 精品性影院一区二区三区内射 | 99久久精品国产高清一区二区 | 国产一区二区三区电影| 亚洲色精品aⅴ一区区三区| 日本在线视频一区二区| 精品人体无码一区二区三区 | 国产精品乱码一区二区三| 精品亚洲一区二区三区在线播放| 亚洲熟妇av一区二区三区下载| 国产精品熟女视频一区二区| 久久精品国产免费一区| 免费观看日本污污ww网站一区| 无码人妻一区二区三区在线| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 精品女同一区二区| 久久无码人妻一区二区三区| 日韩有码一区二区| 日韩一区二区三区四区不卡| 国精产品一区一区三区 | 国产一区二区三区免费观在线| 毛片一区二区三区| 无码国产精品一区二区免费模式| 一区二区三区高清视频在线观看| 国产成人亚洲综合一区| 人妻激情偷乱视频一区二区三区|