当使用forkJoin所有(在这种情况下,HTTP请求)被发送到服务器瞬间,然后发出一个数组一个单线程服务器(NodeJS)。如果observable_array
包含10个HTTP请求,并且每个请求需要3秒才能完成,则可以在30秒内完成其他请求。Angular2 RxJS ForkJoin替代
我正在寻找的是执行请求1,等待服务器的响应来完成的一种方式,然后执行请求2,然后等待响应等使用这种方法意味着新的请求不要” t必须等待30秒,然后observable_array
完成由服务器执行......他们只会等待最多3秒。
我想出了以下解决方案,但我相信有更多知识的人有更优雅的解决方案。
let observable_array = [observable1, observable2, ...];
var queue = function(t, ob) { // Needed to use var instead of let because of scoping...
if (ob) {
ob.subscribe(res => {
console.log('Res: ', res);
queue(t, observables.shift());
}, err => {
console.log('Err: ', err);
});
}
}
queue(this, observables.shift());
[可观察到的数组的顺序订阅](https://stackoverflow.com/questions/46388455/sequential-subscription-to-an-array-of-observables) – jonrsharpe
我不确定他的问题是一样的 - 链接的'重复'不关心并行执行,这是OP关心的 - 他只关心顺序订阅结果。所不同的是关心过多并发的HTTP请求...... –
你倒是应该寻找在后端的解决方案,因为如果有人要溢出你调用堆栈这会是容易... – Maxime