【问题标题】:How to set a timeout on a request with Apollo-Client如何使用 Apollo-Client 为请求设置超时
【发布时间】:2018-04-22 05:50:58
【问题描述】:

我有一个 React-Native 应用程序,我在其中向 GraphQL 服务器发出请求。一切正常,除了我需要一种方法将请求/客户端的超时设置为 5 或 10 秒。目前,请求需要很长时间才能超时(大约 1 分钟)。

这是我如何使用客户端的简单示例。

const client = new ApolloClient({
  networkInterface: createNetworkInterface({
    uri: `${config.server_hostname}/graphql`
  })
});

client.query({ query: gqlString });

我一直无法通过 StackOverflow、谷歌搜索或 Apollo 的文档找到任何解决方案。

【问题讨论】:

    标签: javascript react-native graphql apollo apollo-client


    【解决方案1】:

    Apollo 客户端使用(v1.9apollo-link-http)获取 API 来发送请求。因此有is no cross-browser way to abort a fetch。您可以创建自己的网络接口或链接并使用如下内容:

    const oldfetch = fetch;
    fetch = function(input, opts) {
      return new Promise((resolve, reject) => {
          setTimeout(reject, opts.timeout);
          oldfetch(input, opts).then(resolve, reject);
      });
    }
    

    但要小心,因为这实际上并没有中止请求。您最终可能会遇到大量正在运行的请求并达到浏览器限制。

    顺便说一句,AbortController 看起来像 apollo-link-http is prepared ;-)

    【讨论】:

    • 知道AbortController 是否可以使用吗?
    • Mozilla 文档说它现在对大多数浏览器都有完全或部分支持,但我正在考虑使用 polyfill 以防万一 (npmjs.com/package/abortcontroller-polyfill) 来阻止超时。
    猜你喜欢
    • 2019-12-24
    • 1970-01-01
    • 2022-12-11
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    相关资源
    最近更新 更多