【发布时间】:2018-02-19 17:56:11
【问题描述】:
我正在尝试将 Fetch API 与 Promise 一起使用,并且我对 API 进行了以下调用。
export const refreshTokenAPI = () => {
return fetch('/api/auth/gettoken/' ,{
cache: 'no-store',
headers: {
'Authorization': 'Basic '+ btoa(getToken() + ':'),
'pragma': 'no-cache',
'cache-control': 'no-cache'
}
})
.then(response => {
return handle_response(response)
})
.catch(error => {
throw error;
})
};
当我尝试调用它时,响应只是处于“待处理”状态并且不会从那里去任何地方。奇怪的是,当我从开发控制台内部禁用缓存时,它解决得很好。从 sn-p 中可以看出,我已经尝试了很多方法来禁用调用本身的缓存,但它们都没有做任何事情。
我什至在端点本身上尝试过老式缓存破坏,所以我完全不知所措!有什么想法吗?
编辑:事实证明,如果您等待足够长的时间(约 40 秒),它最终会在启用缓存的情况下解决...不知道为什么缓存会导致它挂得这么严重?
【问题讨论】:
-
打电话
handle_reponse(response)之前是不是少了一步?首先从响应中返回json(return response.json()),然后处理结果。 -
句柄响应包含
return response.json()本身:const handle_response = (response) => { if (response.ok) { return response.json(); } throw response };那我总是可以先尝试调用它? -
处理
handle_response结果的下一个.then()阶段在哪里?我的意思是response.json()。 -
刚刚尝试将
return response.json()移动到它通常所在的位置,并且您会得到相同的效果:如果缓存被禁用,则工作正常,否则将永远挂起:( -
您可以尝试禁用所有插件吗?大多数情况下,这可能是一个插件问题。
标签: javascript reactjs google-chrome promise fetch-api