【问题标题】:Cancelling promise in nuxt-axios response interceptor在 nuxt-axios 响应拦截器中取消承诺
【发布时间】:2020-10-01 19:39:45
【问题描述】:

基本上,我的问题正是https://github.com/axios/axios/issues/583。可以通过throw new axios.Cancel('Operation canceled by the user.');.. 完成。但是我如何在 nuxt axios 模块中做到这一点?我在文档中看不到它,我尝试了 $axios.Cancel('Error') 但返回 $axios.Cancel 不是构造函数

基本上,我正在寻找类似下面的 sn-p 的东西:

axios.interceptors.response.use(function (response) {
    throw new axios.Cancel('Operation canceled by the user.');
  }, function (error) {
    return Promise.reject(error);
  });

强调throw new axios.Cancel

【问题讨论】:

    标签: axios nuxt.js


    【解决方案1】:

    nuxt/axiosv5.8.0IsCancel 可用

    v5.8.0CancelTokenisCancel添加到axios实例

    【讨论】:

    • 如果您能提供一个 sn-p,我将不胜感激。我已经更新了我的问题
    【解决方案2】:

    似乎 nuxt-axios 没有任何确切的等价物,但我找到了解决方法。

    plugins/axios.js

    export default function({ $axios, req, store, redirect, app }, inject) {
      // const source = $axios.CancelToken.source()
      const timeout = process.env.API_TIMEOUT || 10000
      const errorHandling = function(error) {
        console.log(`API ${error}`)
        return new Promise(() => {})
      }
      $axios.onResponse((response) => {
        // Any condition that could be considered an response based on standard response
        if(response.code !== 200){
          throw response.msg
        }
      })
    

    【讨论】:

    • 我正在使用 5.10.3.. 你能给我一个 sn-p 吗?请记住,我想取消 response 而不是 request
    【解决方案3】:

    虽然@nuxtjs/axios 没有公开axios.Cancel,您仍然可以直接导入axios 来获取该符号。注意axios 已经是@nuxtjs/axios 的依赖,所以不需要额外的依赖。

    示例(使用@nuxtjs/axios v5.11.0 测试):

    // plugins/axios.js
    import { Cancel } from 'axios'
    
    export default function ({ $axios }) {
      $axios.onResponse((response) => {
        if (response.code !== 200){
          throw new Cancel(response.msg)
        }
      })
    }
    

    【讨论】:

    • 这可能是最好的答案..我曾想过使用实际的 axios 但不是这样。
    猜你喜欢
    • 2022-01-25
    • 2020-11-28
    • 2020-09-25
    • 2018-09-27
    • 2020-06-04
    • 2020-11-21
    • 2020-07-26
    • 1970-01-01
    相关资源
    最近更新 更多