Я использую RxJs версии 5 в моем проекте Angular 2. Я хочу создать некоторые наблюдаемые, но я не хочу, чтобы наблюдаемые вызывались немедленно.
В версия 4 вы можете управлять вызовом с помощью (например) Controlled или Допустимые буферы. Но эта функциональность отсутствует (пока), доступной в версии 5.
Как я могу получить такую функциональность в RxJs 5?
Моя конечная цель - поставить в очередь созданные наблюдаемые и вызвать их по одному. Следующий вызов запускается только при успешной обработке предыдущего. Когда кто-то терпит неудачу, очередь опустеет.
ИЗМЕНИТЬ
С комментарием @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();