我正在使用apollo-client@2.3.5
(但是此问题在最新版本上也会发生,并且可能与Apollo Client本身没有直接关系)。
我使用多个请求来加载应用程序的不同部分。我的问题是,按Escape
键会取消获取请求,并破坏整个应用程序。我已经尝试过:
Escape
按键事件并调用preventDefault()
,stopPropagation()
,return false
signal
字段但是,Escape
按键仍然取消了请求。
是否有任何变通办法或方法来防止取消获取请求?也许有一些与Fetch API兼容的客户端不会在Escape
按键时取消请求?
答案 0 :(得分:0)
对于遇到相同或相似问题的任何人,我都设法这样解决:
我创建了以下功能:
export const makeRequest = (url, requestParams) => {
requestParams.data = requestParams.body;
return axios(url, requestParams)
.then(response => {
return new Response(JSON.stringify(response.data), {
...response.headers,
status: response.status,
statusText: response.statusText
})
});
};
我使用fetch
属性替换了Apollo Client中Apollo Link中的默认提取:
new HttpLink({
uri: config.graphqlUrl,
credentials: 'same-origin',
fetch: makeRequest
})
makeRequest
函数模仿fetch
,但不能通过按Escape
键来取消。
Apollo客户期望响应是Response的实例,因此我们为它提供了一个。
编辑:
原来,它在IE11上不起作用。如果您关心IE的兼容性,则应安装whatwg-fetch
(https://www.npmjs.com/package/whatwg-fetch),并在文件顶部包括以下内容:
import { Response } from "whatwg-fetch";