Цикл по массиву объектов на основе идентификатора в эффектах ngrx - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу l oop через идентификаторы, представить в массиве объектов и затем передать его другому действию. Я пробовал data.foreach и получаю ошибку. Скорее всего, я не использую правильный оператор RX js. Любая помощь в этом будет принята с благодарностью.

Пример данных = [{id: 1, имя: 'name1'}, {id: 2, имя: 'name1'}]

loadSucces$ = createEffect(() =>
            this.actions$.pipe(
                ofType(Actions.loadSuccess),
                switchMap(([data]) =>
// data returns an array of objects, from whose id I want to go through
                    this.service
                        .get('data.id')
                        .pipe(
                            map(serviceData =>
                                Actions.loadDataSuccess({ serviceData })
                            ),
                            catchError(error =>
                                of(Actions.loadDataSuccess({ error }))
                            )
                        )



                )
            )
        );

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

https://timdeschryver.dev/snippets/multiple-service-calls-from-an-effect

refresh$ = createEffect(() =>
  this.actions$.pipe(
    ofType(CustomerActions.refresh),
    exhaustMap(({ customerIds }) =>
      merge(
        ...ids.map(id =>
          this.customersService.getCustomer(id).pipe(
            map(CustomerActions.getCustomerSuccess),
            catchError(err =>
              of(CustomerActions.getCustomerFailed(id, err.message)),
            ),
          ),
        ),
      ),
    ),
  ),
)
0 голосов
/ 01 апреля 2020

создайте массив действий, которые вы хотите выполнить, затем вызовите mergeMap для него с помощью from.

// ....
mergeMap(([data]) => {
  const actions = data.map(item => Actions.someAction(item));
  // now actions is an array of actions we want to pass further.
  return from(actions);
})

, после чего каждый элемент действий будет обработан через хранилище.

...