Apollo-link: Timeout-Option für apollo-link-http hinzugefügt

Erstellt am 20. Feb. 2019  ·  7Kommentare  ·  Quelle: apollographql/apollo-link

Es wäre sehr schön, einen Millisekunden-Timeout-Wert in die apollo-link-http-Optionen aufnehmen zu können.

Auch wenn dies den laufenden Abruf im Moment nicht abbrechen kann, wäre es sehr nützlich, damit nicht jeder seine eigene Lösung würfeln muss:

https://stackoverflow.com/questions/40837676/apolloclient-timeout-best-option
https://stackoverflow.com/questions/47198402/how-to-set-a-timeout-on-a-request-with-apollo-client

feature

Hilfreichster Kommentar

Hallo Apollo-Team, Es ist sehr nützlich, dass eine Timeout-Option standardmäßig in der Implementierung des Apollo-Graphql-Clients unterstützt wird. Da dies eng mit Clientanforderungen gekoppelt ist, ist es fair, das Timeout anzufordern.
Planen Sie diese Funktion bereits? Wie stehen Sie derzeit zu dieser Anfrage?

Wir freuen uns, bald von Ihnen zu hören.

Danke
Aravind

Alle 7 Kommentare

Ja, es sollte möglich sein, den Abruf zu verpacken und die Anfrage bei Bedarf zu timen.

Wenn Leute auf die Nicht-Timeout-Version angewiesen sind, müssten wir ein Opt-out für dieses Verhalten bereitstellen.

Wir können den abortConttoller für den Abbruch selbst verwenden.

Die Gedanken? @willson

@dshook @JoviDeCroock Ich denke, was Sie wirklich wollen, ist ein Timeout-Link. Vermutlich möchten Sie die Zeit begrenzen, die der Anrufer möglicherweise auf eine Antwort warten muss, und nur einen Fehler zurückgeben, wenn in dieser Zeit keine Antwort zurückkommt, richtig? Wenn dies der Fall ist, wird es durch das Einfügen in den http-Link selbst nicht mit anderen Links zusammensetzbar. Ihre Abfrage könnte auch in einem anderen Link warten oder hängen bleiben, es muss nicht wirklich der Wiederholungslink sein. Es könnte sich um apollo-link-retry, apollo-link-serialize, apollo-link-queue usw. handeln. Um ein bestimmtes Timeout zu garantieren, brauchen Sie wirklich einen Timeout-Link, der sich ganz oben auf dem Stapel befindet, und Zeiten Anfragen, die zu lange gedauert haben, herauszufiltern (sie abzubrechen und einen Fehler zurückzugeben), unabhängig davon, wo im Stack die Anfrage ansteht.

Wie Sie bereits betont haben, garantiert das Abbrechen der Anfrage nach dem Timeout nicht, dass der Server sie nicht gesehen hat. Seien Sie also vorsichtig mit Mutationen, die nicht idempotent sind.

PS: Es sieht so aus, als hätte jemand bereits einen Timeout-Link erstellt (apollo-link-timeout). Leider ist es nicht sehr flexibel und unterbricht die Link-Abstraktion (z. B. in den Fetch-Link greifen, um die Anfrage abzubrechen und eine timeoutRef zurückzugeben, die von überall aufgerufen werden kann), es scheint nicht gut getestet zu sein, hat einige fragwürdige Eigenschaften Standardwerte (15s Timeout statt kein Timeout) und ist nicht sehr flexibel (z. B. Timeout kann nicht von Abfragevariablen abhängen), aber es wird wahrscheinlich den Zweck für Sie erfüllen.

Ich stimme zu, dass dies großartig wäre, aber ich verstehe, dass die Fetch-API keinen Timeout-Mechanismus hat, daher bin ich mir nicht sicher, ob Fetch unter der Haube verwendet wird oder ob nur normale Versprechungen verwendet werden.

apollo-link-timeout ist nicht flexibel, wie @helfer erwähnt hat. Ich denke, der timeout sollte dynamisch sein. Wie können wir mit Timeouts am besten umgehen? 🤣

_ Beispielabfrage _

<Query
  query={FETCH_QUERY}
  context={{ timeout: 5000 }}
>...</Query>

Ich möchte hier nur nachfassen, was ist die akzeptable aktuelle Lösung? Und es stellt ein reales Szenario dar und scheint eine faire Bitte um eine Auszeit zu sein.

Hallo Apollo-Team, Es ist sehr nützlich, dass eine Timeout-Option standardmäßig in der Implementierung des Apollo-Graphql-Clients unterstützt wird. Da dies eng mit Clientanforderungen gekoppelt ist, ist es fair, das Timeout anzufordern.
Planen Sie diese Funktion bereits? Wie stehen Sie derzeit zu dieser Anfrage?

Wir freuen uns, bald von Ihnen zu hören.

Danke
Aravind

Ist diese Funktion noch auf dem Weg? Wir könnten wirklich von der Timeout-Option profitieren, wenn sie verfügbar ist.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen