У меня есть этот Behaviorsubject:
_list: BehaviorSubject<BehaviorSubject<object>[]>;
list: Observable<Observable<object>[]>;
//That I create like this in the constructor:
this._list= new BehaviorSubject<BehaviorSubject<object>[]>([]);
this.list= this._messages.asObservable();
Теперь в какой-то момент я хочу сбросить _list без отключения подписчиков.Моя первая попытка была:
this._list.next([]);
Но этот подход приводит к этой ошибке:
Error: You provided 'undefined' where a stream was expected.
You can provide an Observable, Promise, Array, or Iterable.
Другой подход состоял в том, чтобы вызвать это снова:
this._list= new BehaviorSubject<BehaviorSubject<object>[]>([]);
this.list= this._messages.asObservable();
Бат этот подходотключает каждого подписчика.
Как дать списку пустой массив BehaviorSubject?
РЕДАКТИРОВАТЬ
Полный стек ошибок согласно запросу:
Error: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at subscribeTo (http://localhost:4200/vendor.js:236751:15)
at subscribeToResult (http://localhost:4200/vendor.js:236890:76)
at MergeMapSubscriber._innerSub (http://localhost:4200/vendor.js:232103:90)
at MergeMapSubscriber._tryNext (http://localhost:4200/vendor.js:232097:14)
at MergeMapSubscriber._next (http://localhost:4200/vendor.js:232080:18)
at MergeMapSubscriber.next (http://localhost:4200/vendor.js:227382:18)
at BehaviorSubject.next (http://localhost:4200/vendor.js:227168:25)
at BehaviorSubject.next (http://localhost:4200/vendor.js:226649:15)
at MsgControllerService.renewMessages (http://localhost:4200/main.js:3279:24)
at http://localhost:4200/main.js:2880:40
(anonymous) @ chat-manager.service.ts:55
invoke @ zone-evergreen.js:359
onInvoke @ core.js:39698
invoke @ zone-evergreen.js:358
run @ zone-evergreen.js:124
(anonymous) @ zone-evergreen.js:855
invokeTask @ zone-evergreen.js:391
onInvokeTask @ core.js:39679
invokeTask @ zone-evergreen.js:390
runTask @ zone-evergreen.js:168
drainMicroTaskQueue @ zone-evergreen.js:559
invokeTask @ zone-evergreen.js:469
invokeTask @ zone-evergreen.js:1603
globalZoneAwareCallback @ zone-evergreen.js:1629
Соответствующий код для ошибки:
addMessages(messages: object[]): void {
if (messages.length > 0) {
let newMessages = messages.map(message => {
message['visualisationState'] = MsgControllerService.initVisualisationState();
message['visualisationState'].strongLabels = MsgControllerService.getTopLabels(message, this.numberOfTopLabels);
return new BehaviorSubject<object>(message);
});
this.addMessageToMessages(newMessages);
}
}
renewMessages(messages: object[]) {
this._messages.next([]);
this.addMessages(messages);
}
addMessageToMessages(newMessage: BehaviorSubject<object>[]) {
this._messages.next(this._messages.getValue().concat(newMessage)); // Error thrown here
}