карта против подписки в @ngrx/store

Я новичок в angular2, в настоящее время я работаю над проектом, который использует @ngrx/store и подписывает классы. Я запутался в том, что метод карты не работает, пока работает магазин подписки. Пожалуйста, помогите мне понять, когда использовать метод карты и подписки. Код ниже.

this.store.select('rating').subscribe(({ topPicks }) => { // code is working });
this.store.select('rating').map(({ topPicks }) => // not working);

person kadir    schedule 27.08.2017    source источник
comment
Операция Map принимает функцию в качестве входных данных и применяет функцию к каждому значению, испускаемому исходным Observable, и выдает результирующие значения как Observable. В случае подписки вы подключаете наблюдаемое к его наблюдателям. Чтобы наблюдатель мог видеть элементы, испускаемые наблюдаемым, или получать уведомления об ошибках или завершенных уведомлениях от наблюдаемого, он должен сначала подписаться на этот наблюдаемый с помощью этого оператора . Типичная реализация оператора Subscribe может принимать от одного до трех методов.   -  person rootkill    schedule 27.08.2017


Ответы (1)


Насколько я понимаю, здесь this.store.select('rating') — это Observable. Зависит от того, является ли наблюдаемый горячим или холодным (для получения дополнительной информации прочитайте это blog) observable начнет выдавать значения. В вашем случае первое утверждение работает, потому что вы подписываетесь на наблюдаемое. Map - это просто оператор, который вы можете использовать для значений, испускаемых наблюдаемым (он не работает как подписчик).

Второй оператор не работает, поскольку на Observable нет подписчика. Чтобы использовать оператор карты, вы можете сделать следующее:

this.store.select('rating').map(/* Do whatever you want to with the emitted values here */).subscribe(({ topPicks }) => {});

Чтобы узнать больше об операторах, вы можете ознакомиться с документацией.

person Pradeepb    schedule 27.08.2017