Было бы очень хорошо иметь возможность включить значение времени ожидания в миллисекундах в параметрах 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 под капотом или используются только обычные промисы.
apollo-link-timeout
не является гибким, как упоминал @helper . Я думаю, что значение timeout
должно быть динамическим. Как мы можем справиться с тайм-аутом наилучшим образом? 🤣
_ пример запроса _
<Query
query={FETCH_QUERY}
context={{ timeout: 5000 }}
>...</Query>
Просто хочу продолжить здесь, каково приемлемое текущее решение? И это представляет собой сценарий реального мира и кажется справедливым запросом на тайм-аут.
Здравствуйте, команда Apollo! Очень полезно иметь опцию тайм-аута, поддерживаемую по умолчанию в реализации клиента apollo graphql. Поскольку это тесно связано с запросами клиентов, справедливо запросить тайм-аут.
Вы уже планируете эту функцию? Какова ваша текущая позиция по этому запросу?
С нетерпением жду Вашего ответа.
Спасибо
Аравинд
Эта функция все еще работает? Мы могли бы действительно извлечь выгоду из опции тайм-аута, если она доступна.
Самый полезный комментарий
Здравствуйте, команда Apollo! Очень полезно иметь опцию тайм-аута, поддерживаемую по умолчанию в реализации клиента apollo graphql. Поскольку это тесно связано с запросами клиентов, справедливо запросить тайм-аут.
Вы уже планируете эту функцию? Какова ваша текущая позиция по этому запросу?
С нетерпением жду Вашего ответа.
Спасибо
Аравинд