Другим решением было бы реализовать приоритетную очередь сортировки.
Из того, что я понимаю, HTTP-запросы не выполняются до тех пор, пока вы не добавите подписчиков. Таким образом, вы можете сделать что-то вроде этого:
Observable<Response> observable = http.get("/api/path", new RequestOptions({}));
requestPriorityQueue.add(HttpPriorityQueue.PRIORITY_HIGHEST, observable,
successResponse => { /* Handle code */ },
errorResponse => { /* Handle error */ });
Это предполагает, что requestPriorityQueue
услуга вводится в компонент.Очередь приоритет будет хранить записи в массиве в следующем формате:
Array<{
observable: Observable<Response>,
successCallback: Function,
errorCallback: Function
}>
Вы должны решить, как элементы добавляются в массив. И, наконец, следующее будет происходить в фоновом режиме:
// HttpPriorityQueue#processQueue() called at a set interval to automatically process queue entries
Метод processQueue
бы сделать что-то вроде этого:
protected processQueue() {
if (this.queueIsBusy()) {
return;
}
let entry: {} = getNextEntry();
let observable: Observable<Response> = entry.observable;
this.setQueueToBusy(); // Sets queue to busy and triggers an internal request timeout counter.
observable.subscribe()
.map(response => {
this.setQueueToReady();
entry.successCallback(response);
})
.catch(error => {
this.setQueueToReady();
entry.errorCallback(error);
});
}
Если вы можете добавить новые зависимости вы можете попробовать использовать следующий пакет НПМ: async-priority-queue
Вы можете использовать службу '$ q' или выполнить свою функцию в обратном вызове ajax-события – Vineet
@Vineet Angular 2 не использует' $ q' – Targaryen