簡體   English   中英

使用 try and catch 處理狀態 500

[英]Handling status 500 with try and catch

我不知道處理我的 API 發送的狀態 500 的最佳方法是什么。 請你幫助我好嗎? 在下面的情況下,當我的 API 響應狀態為 500 時,我希望在我的 redux 存儲中設置錯誤消息。 當我的 API 發送成功狀態碼時,我希望在我的商店中“獲取用戶套牌”。

我的第一次嘗試對我來說既合乎邏輯又枯燥,但它沒有奏效:

const createDeck = async () => {
        try {
          const request = await fetch(`${back}/deck/`, options)
          const response = await request.json()
          store.dispatch({ type: FETCH_USER_DECKS })
        } catch (error) {
          store.dispatch({ type: SET_ERROR, message: error })
        }
      }

當 API 發送 500 狀態時,似乎沒有拋出異常,並且我的 catch 塊中的代碼被忽略。

我的第二次和第三次嘗試也奏效了,但我也排除了它們,但它們感覺令人費解和奇怪:

第二次嘗試:

 const createDeck = async () => {
        try {
          const request = await fetch(`${back}/deck/`, options)
          const response = await request.json()
          if (request.status === 201 || request.status === 200) {
            store.dispatch({ type: FETCH_USER_DECKS })
          } else {
          store.dispatch({ type: SET_ERROR, message: error })
          }
        } catch (error) {
          console.log('error')
        }
  }

這可行,但它完全忽略了 catch 塊,這讓我想知道:那么 try...catch 有什么意義呢?

第三次嘗試:

  const createDeck = async () => {
    try {
      const request = await fetch(`${back}/deck/`, options)
      const response = await request.json()
      if (request.status === 201 || request.status === 200) {
        store.dispatch({ type: FETCH_USER_DECKS })
      } else {
        throw response
      }
    } catch (error) {
      store.dispatch({ type: SET_ERROR, message: error })
    }
  }

這第三次嘗試使用了catch,但是手動拋出異常感覺很奇怪,立即被catch捕獲。

我在這里錯過了什么嗎?

Isbn 在評論中正確回答了這個問題。 我再次把它放在這里是為了可見性:“由於您使用的是 fetch(),因此采用其實現 model 並且不將 500 響應視為異常(嘗試 2)可能是有意義的。但我看不到您的第三次嘗試也有任何問題(例如,axios 在這種情況下會引發錯誤)。請注意 fetch() 響應公開了一個 ok 屬性以檢查請求是否成功“

暫無
暫無

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

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