如何在使用Apollo-Client发起请求时设置超时时间

14

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

这是我如何使用客户端的一个快速示例。

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

client.query({ query: gqlString });

我通过StackOverflow、谷歌搜索和Apollo文档找不到任何解决方案。

1个回答

6
Apollo客户端使用(v1.9apollo-link-http) fetch API发送请求。因此,没有跨浏览器的方式来中止fetch。您可以创建自己的Networkinterface或Link,并使用类似以下内容的内容:
const oldfetch = fetch;
fetch = function(input, opts) {
  return new Promise((resolve, reject) => {
      setTimeout(reject, opts.timeout);
      oldfetch(input, opts).then(resolve, reject);
  });
}

但要小心,这实际上并没有中止请求。您可能会遇到很多运行的请求,并且超过浏览器限制。

顺便说一下,看起来apollo-link-http已经准备好使用AbortController了;-)


AbortController 已经可用了吗? - David Harkness
Mozilla文档表示现在大多数浏览器都已经完全或部分支持,但我考虑使用polyfill作为备选方案(https://www.npmjs.com/package/abortcontroller-polyfill),以实现超时功能。 - Johann Baptista

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接