Angular 2 プロジェクトでRxJs バージョン 5を使用しています。いくつかのオブザーバブルを作成したいのですが、オブザーバブルがすぐに呼び出されるのは望ましくありません。
バージョン 4では、(たとえば) ControlledコマンドまたはPausable Buffersを使用して呼び出しを制御できました。しかし、その機能はバージョン 5では (まだ) 利用できません。
RxJs 5 でこの種の機能を取得するにはどうすればよいですか?
私の最終的な目標は、作成されたオブザーバブルをキューに入れ、1 つずつ呼び出すことです。次のものは、前のものが正常に処理された場合にのみ呼び出されます。いずれかが失敗すると、キューは空になります。
編集
@Niklas Fasching のコメントにより、Publish操作で実用的なソリューションを作成できました。
// Queue to queue operations
const queue = [];
// Just a function to create Observers
function createObserver(id): Observer {
return {
next: function (x) {
console.log('Next: ' + id + x);
},
error: function (err) {
console.log('Error: ' + err);
},
complete: function () {
console.log('Completed');
}
};
};
// Creates an async operation and add it to the queue
function createOperation(name: string): Observable {
console.log('add ' + name);
// Create an async operation
var observable = Rx.Observable.create(observer => {
// Some async operation
setTimeout(() =>
observer.next(' Done'),
500);
});
// Hold the operation
var published = observable.publish();
// Add Global subscribe
published.subscribe(createObserver('Global'));
// Add it to the queue
queue.push(published);
// Return the published so the caller could add a subscribe
return published;
};
// Create 4 operations on hold
createOperation('SourceA').subscribe(createObserver('SourceA'));
createOperation('SourceB').subscribe(createObserver('SourceB'));
createOperation('SourceC').subscribe(createObserver('SourceC'));
createOperation('SourceD').subscribe(createObserver('SourceD'));
// Dequeue and run the first
queue.shift().connect();