正常にデータを取得するためのリクエストを送信したのに、Uncaught (in promise) エラーが発生する理由は何ですか?

エラーの説明: データを取得するための要求の送信は成功し、ネットワークは応答データを返しましたが、このエラーを報告し続けます:

捕まえられなかった (約束) 一晩中探しても間違いは見つからなかった

リクエストのパラメータとメソッドに問題はありませんが、調査の結果、レスポンスのインターセプタの返却に問題があることが判明しました。

私のこれまでの書き方は、axios公式サイトのリクエスト・レスポンス・インターセプターの書き方をベースに、以下のように論理的な判断を直接加えています。

// 応答インターセプターを追加する instance.interceptors.response.use
(
  function (response) {     // バックグラウンド合意、応答は成功しましたが、コードは 10000 ではありません。これはビジネス ロジックの失敗です     if (response.data?.code !== 10000) {       showToast(response.data?.message || 'ビジネスの失敗')      return response.data?.message // ここで return は間違っています... promise を返す必要があります     }      return Promise.reject(response.data ) // ビジネスの成功に必要 取得したデータを返す     },   関数 (エラー) {     // 401 を処理し、ユーザー情報を削除し、ログイン ページにジャンプ + 終了時にアドレスを取得する     if (error.response.status === 401) {       const store = useStoreUser( )       store.delUser()       router.push({         path: '/login',














        クエリ: { returnUrl: router.currentRoute.value.fullPath }
      })
    }
    return Promise.reject(error)
  }
)

しかし、事業の失敗を判断する場合、ここでの返品の内容は間違っています。. .

ビジネスの失敗は、メッセージ情報プロンプトの代わりにプロミスを返す必要があります

ビジネスの成功は、取得したデータを返す必要があります

これらの 2 つの場所が書かれたとき、ロジックは明確ではなく、混乱していました。. . 自分に騙されてまた一日

変更されたコードは次のとおりです

// 応答インターセプターを追加する instance.interceptors.response.use
(
  function (response) {     // バックグラウンド合意、応答は成功しましたが、コードは 10000 ではありません。これはビジネス ロジックの失敗です     if (response.data?.code !== 10000) {       showToast(response.data?.message || 'ビジネスの失敗')       return Promise.reject(response.data)     }




    return response.data
  },
  function (error) {     // 401 を処理してユーザー情報を削除し、ログイン ページにジャンプ + 終了時にアドレスを取得     if (error.response.status === 401) {       const store = useStoreUser()       store. delUser()       router.push({         path: '/login',         query: { returnUrl: router.currentRoute.value.fullPath }       })     }     return Promise.reject(error)   } )











おすすめ

転載: blog.csdn.net/weixin_48082900/article/details/129133966