按下退出键

时间:2018-10-01 12:09:15

标签: javascript fetch apollo-client

我正在使用apollo-client@2.3.5(但是此问题在最新版本上也会发生,并且可能与Apollo Client本身没有直接关系)。

我使用多个请求来加载应用程序的不同部分。我的问题是,按Escape键会取消获取请求,并破坏整个应用程序。我已经尝试过:

  • 捕获Escape按键事件并调用preventDefault()stopPropagation()return false
  • 从获取请求选项中删除signal字段
  • 在Apollo Client中覆盖获取以使用axios(但是这是不可能的,因为axios与Fetch API不兼容)

但是,Escape按键仍然取消了请求。

是否有任何变通办法或方法来防止取消获取请求?也许有一些与Fetch API兼容的客户端不会在Escape按键时取消请求?

1 个答案:

答案 0 :(得分:0)

对于遇到相同或相似问题的任何人,我都设法这样解决:

  1. 我创建了以下功能:

    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
                })
            });
    };
    
  2. 我使用fetch属性替换了Apollo Client中Apollo Link中的默认提取:

    new HttpLink({
        uri: config.graphqlUrl,
        credentials: 'same-origin',
        fetch: makeRequest
    })
    

makeRequest函数模仿fetch,但不能通过按Escape键来取消。

Apollo客户期望响应是Response的实例,因此我们为它提供了一个。

编辑: 原来,它在IE11上不起作用。如果您关心IE的兼容性,则应安装whatwg-fetchhttps://www.npmjs.com/package/whatwg-fetch),并在文件顶部包括以下内容:

import { Response } from "whatwg-fetch";