另一种解决方案是实现排序的优先级队列。
据我了解,除非您添加订阅者,否则不会执行 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