web-dev-qa-db-ja.com

Apollo-Clientを使用してリクエストにタイムアウトを設定する方法

GraphQLサーバーにリクエストを送信するReact-Nativeアプリがあります。リクエスト/クライアントのタイムアウトを5秒または10秒に設定する方法が必要な場合を除いて、すべて正常に機能します。現在、リクエストがタイムアウトするまでに非常に長い時間がかかります(約1分)。

これが私がクライアントをどのように使うかの簡単な例です。

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

client.query({ query: gqlString });

StackOverflow、Google検索、またはApolloのドキュメントで解決策を見つけることができませんでした。

8
menderleit

Apolloクライアントは( v1.9 および apollo-link-http )フェッチAPIを使用してリクエストを送信します。したがって、 フェッチを中止するクロスブラウザの方法はありません 。独自のネットワークインターフェイスまたはリンクを作成して、次のようなものを使用できます。

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 準備されています for AbortController ;-)のように見えます

3
Reto Aebersold