2015-07-08 2 views
0

В моем приложении durandal у меня есть несколько запросов на опрос, которые происходят каждые 10 секунд. Но иногда, если сервер перестает отвечать на этот опрос, запросы остаются в состоянии ожидания. Если в запросе больше ожидающих запросов, чем поддерживается браузером, оно зависает от приложения и требует обновления браузера.В ожидании запросов AJAX в SPA заморозить приложение

Я объединил опросы как можно больше и убедился, что новый запрос выполняется только после завершения предыдущего. Но все же у меня много параллельных опросов. Кроме того, переход на сокеты на данном этапе непросто.

Хотели бы знать, какие наилучшие методы избегают подобных проблем в мире SPA.

+0

Сделать вызов асинхронным. Не знаю много о Durandal, но он реализует обещания jQuery из того, что я видел –

+0

Да, они асинхронны - проблема в том, что если у меня будет 6 запросов в ожидающем состоянии, браузер сохранит 7-й запрос в очереди, пока один из ожидающий запрос завершен (зависит от браузера и его максимального предела одновременного запроса) – w3dev

+1

Можно использовать таймаут, чтобы отложить обещание через определенное время? –

ответ

1

Вы должны иметь возможность предотвратить неограниченное количество параллельных запросов ajax, объединяя их вместе рекурсивно. Скажем, у вас есть два параллельных запросы AJAX, вы можете сделать это:

function doCallOne() { 
    $.get('urlOne').done(doCallOne); 
} 
function doCallTwo() { 
    $.get('urlTwo').done(doCallTwo); 
} 
doCallOne(); 
doCallTwo(); 

Теперь вы будете иметь вызовы, которые непрерывно цепные после разлагает предыдущий вызов. Вы можете расширить эти функции, чтобы обеспечить минимальную задержку, выйти вручную и так далее. Однако того, что никогда не произойдет, является вызов одного из них, чтобы иметь более одного ожидающего вызова.