另一種解決方案是實施排序的優先隊列。
從我理解的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);
});
}
如果能夠增加新的依賴,你可以嘗試使用以下NPM包: async-priority-queue
你可以使用'$ q'服務或在ajax成功回調中執行你的函數 – Vineet
@Vineet Angular 2不使用'$ q' – Targaryen