Ответ 1
Возможно, оператор scan
может вас заинтересовать. Вот пример:
obs.startWith([])
.scan((acc,value) => acc.concat(value))
.subscribe((data) => {
console.log(data);
});
См. этот вопрос для получения дополнительной информации:
Как добавить элементы в Observable
?
Это код:
this.logEntries = this.controllerService.getLog(this.controller.remoteID, this.skip, this.max);
this.logEntries.subscribe(a => {
this.allLogEntries.add(this.logEntries)
});
и вот их объявления:
logEntries: Observable<Log[]>;
allLogEntries: Observable<Log[]> = Observable.empty<Log[]>();
Я хочу добавить элементы в allLogEntries, поскольку они извлекаются из веб-службы. Как это сделать?
Возможно, оператор scan
может вас заинтересовать. Вот пример:
obs.startWith([])
.scan((acc,value) => acc.concat(value))
.subscribe((data) => {
console.log(data);
});
См. этот вопрос для получения дополнительной информации:
Если вы хотите объединить два наблюдаемых вместе, вам нужно, например, combineLatest
:
Observable
.combineLatest(this.logEntries, this.allLogEntries)
.subscribe(...);
Это дает вам доступ к последним значениям из каждого наблюдаемого, обновляемому по мере их изменения, и вы можете комбинировать их по мере необходимости.
Если вы хотите, чтобы вы могли вручную вводить записи в один из исходных наблюдаемых, сделайте Subject
:
this.logEntries = new Subject();
Observable
.combineLatest(this.logEntries, this.allLogEntries)
.subscribe(...);
то вы можете вызвать обновление с помощью:
this.logEntries.next(...);
и ваша подписка получит новый logEntries
вместе с последним allLogEntries
. В зависимости от вашего поведения вы можете использовать ReplaySubject
или BehaviourSubject
вместо vanilla Subject
.
Взгляните на BehaviorSubject:
Это a Observable
, где вы можете нажать новый элемент как содержащий объект.