首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Axios拦截器setTimeout()在dev中工作,但在编译和部署之后不工作

Axios拦截器setTimeout()在dev中工作,但在编译和部署之后不工作
EN

Stack Overflow用户
提问于 2021-09-19 23:47:41
回答 1查看 360关注 0票数 0

我在我的axios模块中内置了一个延迟,用于测试react、UI、纺丝器等。

mock_delay在我的本地机器上工作得很好,但是在我的npm build和部署之后,似乎没有返回承诺。

如果我将mock_delay设置为false,这在我的本地和远程(构建的,nginx)机器上都能工作。但是,如果设置了超时,那么在构建的服务器上,我会看到"console.log('config.mock_delay‘等)“,而不是"console.log('response',response)”。

有什么线索吗?

代码语言:javascript
运行
复制
const Server = axios.create({
    baseURL: AUTH_API2_URL,
    timeout: 5000,
    mock_delay: false, //800,
    headers: {
      'Authorization': currentJWTHeader(),
      'Content-Type': 'application/json',
      'accept': 'application/json'
    }
  })

Server.interceptors.request.use((config) => {
  if (config.mock_delay) {
    console.log('config.mock_delay', config.mock_delay)
    return new Promise(resolve =>
      setTimeout(() => resolve(config), config.mock_delay))
  }
  return config
})

Server.interceptors.response.use(
  response => {
    console.log('response', response)
    return response
  }
}
EN

回答 1

Stack Overflow用户

发布于 2021-09-20 02:22:29

我不知道你的本地版本是如何工作的,但是在生产上,它有不起作用的理由。

第一,axios拦截器use需要具有如下签名的函数:req => req。它意味着接收请求并返回一个增强的请求。在此参考:

https://axios-http.com/docs/interceptors

https://masteringjs.io/tutorials/axios/interceptors

因此,使用您的代码,当mock_delayfalseconfig => config时是正确的。

但是,如果mock_delay不是false,而是config => Promise,那么您的代码就会因为错误的期望而失败,这就是为什么您从未看到response的原因。

让它扭曲一点:

代码语言:javascript
运行
复制
function delay(ms) {
    // my prev answer has a mistake
    // that is the `resolve` function is undefined
    // return new Promise((resolve) => setTimeout(resolve, ms));
    // fix here
    return new Promise(() => setTimeout(() => {}, ms));
}

// remember to add async keywork
Server.interceptors.request.use(async (config) => {
  if (config.mock_delay) {
    console.log('config.mock_delay', config.mock_delay)
    // with await, this will wait for the time of mock_delay
    await delay(config.mock_delay)
  }

  // finally still return config
  return config
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69247858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档