Apollo-link: Добавить опцию тайм-аута для apollo-link-http

Созданный на 20 февр. 2019  ·  7Комментарии  ·  Источник: apollographql/apollo-link

Было бы очень хорошо иметь возможность включить значение времени ожидания в миллисекундах в параметрах 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

Самый полезный комментарий

Здравствуйте, команда Apollo! Очень полезно иметь опцию тайм-аута, поддерживаемую по умолчанию в реализации клиента apollo graphql. Поскольку это тесно связано с запросами клиентов, справедливо запросить тайм-аут.
Вы уже планируете эту функцию? Какова ваша текущая позиция по этому запросу?

С нетерпением жду Вашего ответа.

Спасибо
Аравинд

Все 7 Комментарий

Да, должна быть возможность обернуть выборку и при необходимости отсрочить запрос.

Если люди зависят от версии без тайм-аута, нам нужно будет предоставить возможность отказаться от этого поведения.

Мы можем использовать abortConttoller для самой отмены.

Мысли? @hwillson

@dshook @JoviDeCroock Я думаю, что вам действительно нужна ссылка с тайм-аутом. Предположительно, вы хотите ограничить количество времени, в течение которого вызывающая сторона может ожидать ответа, и просто вернуть ошибку, если за это время не будет получен ответ, правильно? Если это так, размещение его в самой http-ссылке не сделает его компонуемым с другими ссылками. Ваш запрос может ожидать или застрять в любой другой ссылке, это не обязательно должна быть ссылка повторной попытки. Это может быть в apollo-link-retry, apollo-link-serialize, apollo-link-queue и т. д. Чтобы гарантировать определенное время ожидания, вам действительно нужна ссылка времени ожидания, которая находится на самом верху стека, и время из запросов, которые заняли слишком много времени (отменив их и возвращая ошибку), независимо от того, где в стеке находится запрос.

Как вы указали, отмена запроса после истечения времени его ожидания не гарантирует, что сервер его не увидит, поэтому будьте осторожны с мутациями, которые не являются идемпотентными.

PS: Похоже, кто-то уже сделал ссылку на тайм-аут (apollo-link-timeout). К сожалению, он не очень гибкий и нарушает абстракцию ссылки (например, доступ к ссылке выборки, чтобы прервать запрос и вернуть timeoutRef, который можно вызвать из любого места), он не выглядит хорошо протестированным, имеет некоторые сомнительные по умолчанию (время ожидания 15 секунд вместо отсутствия времени ожидания) и не очень гибкое (например, время ожидания не может зависеть от переменных запроса), но, вероятно, это поможет вам.

Я согласен, что это было бы здорово, но я понимаю, что Fetch API не имеет механизма тайм-аута, поэтому я не уверен, используется ли Fetch под капотом или используются только обычные промисы.

apollo-link-timeout не является гибким, как упоминал @helper . Я думаю, что значение timeout должно быть динамическим. Как мы можем справиться с тайм-аутом наилучшим образом? 🤣

_ пример запроса _

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

Просто хочу продолжить здесь, каково приемлемое текущее решение? И это представляет собой сценарий реального мира и кажется справедливым запросом на тайм-аут.

Здравствуйте, команда Apollo! Очень полезно иметь опцию тайм-аута, поддерживаемую по умолчанию в реализации клиента apollo graphql. Поскольку это тесно связано с запросами клиентов, справедливо запросить тайм-аут.
Вы уже планируете эту функцию? Какова ваша текущая позиция по этому запросу?

С нетерпением жду Вашего ответа.

Спасибо
Аравинд

Эта функция все еще работает? Мы могли бы действительно извлечь выгоду из опции тайм-аута, если она доступна.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги