Подтвердить что ты не робот

Backbone.js: определение тайм-аута для реализации Backbone.sync

Я использую магистраль по моему проекту, интегрированному с коммуникацией с внешним API. Я хочу использовать обновление записей в реальном времени. Поскольку у меня нет доступа к основному бэкэнду этого внешнего приложения, и они не предоставляют ни сервера websocket, ни конечной точки длинного опроса, я в основном остаюсь с возможностью регулярного опроса с setInterval и периодом в 50 секунд, Он работает достаточно хорошо. Моя проблема - краевой случай. Если по какой-то причине API-запрос зависает, более 50 секунд, скажем, я сразу же вызову новый запрос. Это означает, что теперь есть два висячих запроса, которые в конечном итоге будут складываться. Есть ли способ установить тайм-аут для запроса? Я знаю, что все запросы приводят к Backbone.sync, но я проверял исходный код, и я не вижу возможного способа установить тайм-аут для XmlHttpRequest. Есть ли способ сделать это чисто и без перезаписывания поведения? Или существуют другие решения/обходные пути?

4b9b3361

Ответ 1

Просто передайте параметр timeout:milliseconds в аргументе options в fetch. Параметры передаются непосредственно на jQuery.ajax, который обрабатывает низкоуровневый вызов XHR:

 collection.fetch({timeout:50000});

В качестве альтернативы вы можете установить глобальный тайм-аут для всех запросов, сделанных вашим приложением, вызвав jQuery.ajaxSetup при запуске вашего приложения:

$.ajaxSetup({timeout:50000});