withLatestFrom () возвращает все состояние - PullRequest
0 голосов
/ 21 июня 2019

У меня есть следующий код:

@Select(CustomerState.customerProducts) customerProducts$: Observable<CustomerProduct[]>;

this.layouts$ = this.store.dispatch([
      new LoadCustomerProducts(),
    ]).pipe(
      withLatestFrom(this.customerProducts$),
      map(([customerProducts]) => {
        console.log('CP!!!', customerProducts);
        return this.loadLayouts(customerProducts);
      })
    );

Проблема в том, что когда я регистрирую customerProducts, я ожидаю, что он вернет только массив клиентского продукта, но вместо этого он вернет все состояние.Почему это так?

Спасибо!

1 Ответ

1 голос
/ 21 июня 2019

withLatestFrom помещает значение из предоставленного Observable в массив, который вы разрушаете с помощью map. Если store.dispatch в ngxs возвращает хранилище Observable, вы хотите:

this.layouts$ = this.store.dispatch([
      new LoadCustomerProducts(),
    ]).pipe(
      withLatestFrom(this.customerProducts$),
      map(([store, customerProducts]) => {
        console.log('CP!!!', customerProducts);
        return this.loadLayouts(customerProducts);
      })
    );

См .: https://rxjs.dev/api/operators/withLatestFrom

Стоит отметить, что withLatestFrom не будет ждать, пока издаст customerProducts$. Вместо этого, когда вы подписываетесь на layouts$, вы немедленно получите текущее состояние, но, поскольку customerProducts$ еще не излучил, layout$ не будет излучать.

https://stackblitz.com/edit/rxjs-efmtxp

...