Подождите два действия последовательности, прежде чем сделать что-то в ngrx эффект угловой - PullRequest
0 голосов
/ 10 июня 2019

Я хочу: создать книгу, затем загрузить список книг, а затем перейти на страницу сведений о книге

Предположим, у меня есть 2 эффекта: загрузить список книг и создать книгу. Эффект loadListBook работает корректно (как и раньше)

Мой эффект создания написан правильно?

create$: Observable<Action> = this.action$.pipe(
  ofType<CreateBook>(BookActions.createBook),
  switchMap(action => {
    return this.bookService.create(action.payload).pipe(
      map(newbook => {
       console.log(newbook)
      }),
      catchError(error => of(  {
        type: 'CREATE_BOOK_FAILURE'
      }))
    );
  }),
  switchMap(bookInfo => [
    new LoadBookList()
  ]),
  tap(book => {
    // want to navigate to book detail here
    console.log(e);
  })
);

1 Ответ

0 голосов
/ 10 июня 2019

Тогда вам следует использовать mergeMap в этом случае

Из документации

Maps each value to an Observable, then flattens all of these inner Observables using mergeAll.

enter image description here

Пример

var letters = Rx.Observable.of('a', 'b', 'c');
var result = letters.mergeMap(x =>
  Rx.Observable.interval(1000).map(i => x+i)
);
result.subscribe(x => console.log(x));

// Results in the following:
// a0
// b0
// c0
// a1
// b1
// c1
// continues to list a,b,c with respective ascending integers
...