Ссылаясь на этот билет NGRX, я вижу странность, когда подписка на селектор factory не запускается при обновлении состояния, однако канал async
работает .
Чтобы уточнить, если я настрою общедоступное наблюдаемое свойство для компонента и привяжу к нему HTML с помощью канала async
, значение будет обновляться по мере обновления состояния.
Component.ts
public test$: Observable<ChatInteraction>;
[...]
this.test$ = this.store
.select(getNewMessageForChat(this.chat.chatId));
Component.html
test: {{(test$ | async).message}}
Затем я получаю такой вывод, как
test: test1
test: test2
etc etc
Однако, если я пытаюсь подписаться на тот же наблюдаемый объект, он срабатывает один раз при создании подписки, но никогда снова при обновлении состояния.
Component.ts
this.store
.select(getNewMessageForChat(this.chat.chatId))
.subscribe(() => {
if (this._calculateScrollDistanceFromBottom(this.chatWindowElem.nativeElement) <= 20) {
this._scrollToBottom();
}
});
Если я поставлю точку останова на этот оператор if
, он не будет достигнут при обновлении состояния.
Есть идеи, почему?
1 ответ
Догадаться. Оказалось, что в моей подписке есть ссылка на неопределенный объект, из-за чего подписка прервалась при первом запуске и больше не срабатывала. Это было трудно уловить, так как оказалось, что в коде subscription
есть попытка / отказ, если не задана настройка.
__tryOrUnsub(fn, value) {
try {
fn.call(this._context, value);
}
catch (err) {
this.unsubscribe();
if (config.useDeprecatedSynchronousErrorHandling) {
throw err;
}
else {
hostReportError(err);
}
}
}
hostReportError
ничего не пузырило, так что мне казалось, что он больше не стреляет.
Похожие вопросы
Новые вопросы
ngrx
NgRx - это библиотека управления реактивным состоянием для Angular, основанная на шаблоне проектирования потоков.