另一种解决方案是实施排序的优先队列。
从我理解的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