#javascript #angular #rxjs
Вопрос:
у меня есть это на фасаде
chatMessagesState$ = this.store.pipe(select(ChatMessageSelectors.getChatMessagesState));
это на селекторе
export const getChatMessagesState = createSelector( getChatMessages, (payload: ChatMessagesState) =gt; payload );
и это по компоненту
this.chatMessagesSub = this.chatMessagesFacade.chatMessagesState$.subscribe(state =gt; { if (state.messages) { // do something } });
как я могу принять состояние, не подписываясь?
Комментарии:
1. Я видел, что есть какой-то объект поведения
Ответ №1:
constructor(private storeState: Statelt;YourStategt;) const state = this.storeState.value['your-state'];
Если вам нужно принять значение только 1 раз
Ответ №2:
Один из способов-преобразовать Observable
в a Promise
и использовать async-await
:
async getStateValue(){ const state=await this.chatMessagesFacade.chatMessagesState$.toPromise(); return state; }
Примечание: Этот метод противоречит назначению наблюдаемых объектов, потому что вы не сможете прослушивать вносимые изменения. Обещание будет либо разрешено/отклонено только один раз.
Комментарии:
1. Zoneawareprom { зона_символ__состояние: null, _zone_symbol_ значение: Массив(0)} _zone_symbol_ состояние: null _zone_symbol_ значение: [] Символ(Символ.toStringTag): (…) Символ(Символ.вид): (…) __прото : Объект
2. не работает 🙁