apollo-link-httpオプションにミリ秒のタイムアウト値を含めることができると非常に便利です。
現時点で進行中のフェッチを中止できない場合でも、非常に便利なので、全員が独自のソリューションを実行する必要はありません。
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
はい、フェッチをラップし、必要に応じてリクエストをタイムアウトできるはずです。
タイムアウト以外のバージョンに依存している場合は、この動作をオプトアウトする必要があります。
キャンセル自体にabortConttollerを使用できます。
考え? @hwillson
@ dshook @ JoviDeCroock本当に必要なのはタイムアウトリンクだと思います。 おそらく、呼び出し元が応答を待たなければならない時間を制限し、その時間内に応答が返ってこない場合はエラーを返すだけですよね? もしそうなら、それをhttpリンク自体に入れても、他のリンクと構成可能にはなりません。 クエリが待機しているか、他のリンクでスタックしている可能性があります。実際には再試行リンクである必要はありません。 apollo-link-retry、apollo-link-serialize、apollo-link-queueなどにある可能性があります。特定のタイムアウトを保証するために本当に必要なのは、スタックの最上部にあるタイムアウトリンクと時間です。スタック内のどこでリクエストが保留されているかに関係なく、時間がかかりすぎた(キャンセルしてエラーを返す)リクエストを送信します。
ご指摘のとおり、タイムアウト後にリクエストをキャンセルしても、サーバーがリクエストを認識しなかったとは限りません。したがって、べき等ではないミューテーションには注意してください。
PS:誰かがすでにタイムアウトリンク(apollo-link-timeout)を作成したようです。 残念ながら、それはあまり柔軟性がなく、リンクの抽象化を壊します(たとえば、フェッチリンクに到達して要求を中止し、どこからでも呼び出すことができるtimeoutRefを返す)、十分にテストされていないようで、疑わしい点がありますデフォルト(タイムアウトなしではなく15秒のタイムアウト)であり、柔軟性はあまりありません(たとえば、タイムアウトはクエリ変数に依存できません)が、おそらくそれでうまくいくでしょう。
これは素晴らしいことだと思いますが、Fetch APIにはタイムアウトメカニズムがないことを理解しているため、Fetchが内部で使用されているのか、通常のPromiseだけが使用されているのかわかりません。
@helferが述べたように、 apollo-link-timeout
は柔軟性がありません。 timeout
の値は動的である必要があると思います。 タイムアウトを最善の方法としてどのように処理できますか? 🤣
_例のクエリ_
<Query
query={FETCH_QUERY}
context={{ timeout: 5000 }}
>...</Query>
ここでフォローアップしたいのですが、現在受け入れられている解決策は何ですか? そして、それは現実世界のシナリオを表しており、タイムアウトの公正な要求のようです。
こんにちはアポロチーム、アポロgraphqlクライアントの実装でデフォルトでサポートされているタイムアウトオプションがあると非常に便利です。 これはクライアントの要求と緊密に結合されているため、タイムアウトを要求するのは公平です。
この機能をすでに計画していますか? このリクエストに対するあなたの現在の立場は何ですか?
あなたからの返信を楽しみにしています。
ありがとう
アラヴィンド
この機能はまだ順調ですか? タイムアウトオプションが利用可能であれば、それは本当にメリットがあります。
最も参考になるコメント
こんにちはアポロチーム、アポロgraphqlクライアントの実装でデフォルトでサポートされているタイムアウトオプションがあると非常に便利です。 これはクライアントの要求と緊密に結合されているため、タイムアウトを要求するのは公平です。
この機能をすでに計画していますか? このリクエストに対するあなたの現在の立場は何ですか?
あなたからの返信を楽しみにしています。
ありがとう
アラヴィンド