すべての項目(この場合はHTTPリクエストを)forkJoin使用して、瞬時にサーバーに送信され、その後、アレイとして放出されていますAngular2 RxJS ForkJoin代替
let observable_array = [observable1, observable2, ...];
Observable.forkJoin(observable_array).subscribe(res => {
console.log('Res: ', res);
}, err => {
console.log('Err: ', err);
});
私が使用しているので、これは私にとって問題ですシングルスレッドサーバ(NodeJS)。 observable_array
に10個のHTTP要求が含まれていて、各要求が完了するまでに3秒かかる場合は、30秒間、他の要求を行うことはできません。
私が探しているのは、リクエスト1を実行し、サーバからの応答が完了するまで待ってからリクエスト2を実行し、レスポンスを待つなどです。このアプローチを使用すると、 observable_array
がサーバーによって実行されるのが完了するまでに30秒間待たなければなりません...最大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