我在我的axios
模块中内置了一个延迟,用于测试react
、UI、纺丝器等。
mock_delay在我的本地机器上工作得很好,但是在我的npm build
和部署之后,似乎没有返回承诺。
如果我将mock_delay设置为false,这在我的本地和远程(构建的,nginx)机器上都能工作。但是,如果设置了超时,那么在构建的服务器上,我会看到"console.log('config.mock_delay‘等)“,而不是"console.log('response',response)”。
有什么线索吗?
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
}
}
发布于 2021-09-20 02:22:29
我不知道你的本地版本是如何工作的,但是在生产上,它有不起作用的理由。
第一,axios拦截器use
需要具有如下签名的函数:req => req
。它意味着接收请求并返回一个增强的请求。在此参考:
https://axios-http.com/docs/interceptors
https://masteringjs.io/tutorials/axios/interceptors
因此,使用您的代码,当mock_delay
为false
:config => config
时是正确的。
但是,如果mock_delay
不是false
,而是config => Promise
,那么您的代码就会因为错误的期望而失败,这就是为什么您从未看到response
的原因。
让它扭曲一点:
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
})
https://stackoverflow.com/questions/69247858
复制相似问题