объединить несколько действий в одно действие - PullRequest
0 голосов
/ 30 мая 2019

У меня есть следующий список действий, и я хочу объединить их, чтобы я возвратил список действий и выполнил их одно за другим.

Я пытался

    map(drones => {
      const actions = [];
      drones.forEach((drone) => actions.push(new featureActions.OpenUsedDroneUpdateChannelRequest({ droneId: drone.id, projectId : environment.projectId })));
      actions.push(new featureActions.GetUsedDronesSuccess({drones}));
      return forkJoin(actions);
    }),

Я тоже пробовал

    map(drones => {
      const actions = [];
      drones.forEach((drone) => actions.push(new featureActions.OpenUsedDroneUpdateChannelRequest({ droneId: drone.id, projectId : environment.projectId })));
      actions.push(new featureActions.GetUsedDronesSuccess({drones}));
      return merge(actions);
    }),

Бут не работает

ОШИБКА Ошибка: эффект «UsedDronesEffect.getUsedDrones $» отправил недопустимое действие: {"_isScalar": false}

core.js:15724 ERROR TypeError: Actions must have a type property
    at

Как я могу объединить их?

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Вы должны иметь возможность возвращать массив действий с одним из следующих операторов mergeMap, switchMap and concatMap`.Также он должен возвращать массив действий, почему бы не отправить действия одно за другим?

0 голосов

Вы можете попробовать следующий пример или использовать mergeMap(), чтобы объединить ваши новые действия

@Effect() drones = this.dronesEffect.pipe(
   ...,
   switchMap((res: drones[]) => drones.map(x => new featureActions.OpenUsedDroneUpdateChannelRequest({ droneId: drone.id, projectId : environment.projectId })))
   )
);

Проверьте это Статья

...