Угловой базовый вопрос ngrx @ effect: Типу "Наблюдаемый <void>" нельзя присвоить тип - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь выяснить, как работает @ ngrx / Effects, но у меня возникают некоторые проблемы в этом простом примере ниже моей ошибки и моего кода stackbliz

https://stackblitz.com/edit/redux-in-actions?file=src%2Fapp%2Fstore%2Feffects%2Ftask.effects.ts

Тип «Наблюдаемый» нельзя назначить типу «Наблюдаемый».Тип 'void' нельзя назначить типу 'Action'

благодарю

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Есть пара вещей, которые неправильно начинать с

  • Ошибка, которую вы получаете, заключается в том, что вам нужно pipe(map(data => ...) от import { map } from 'rxjs/operators'.
  • Тогда вам нужнодобавьте dispatch: false, так как вы не возвращаете никаких действий, иначе вы застрянете в бесконечном цикле.

Два варианта

Эффект должен либо возвращать действие, либо dispatch: false

Вариант 1: Нет отправленного действия

@Effect({ dispatch: false }) 
loadTasks$: Observable<void> = this.actions$.pipe(
   ofType(fromActions.ADD_TASK),
   switchMap(() => this.taskService.GetTasks().pipe(
      map(data => {             
        console.log(data);        
      })
   ) 
));

Вариант 2: Операция отправки

@Effect()
loadTasks$: Observable<void> = this.actions$.pipe(
  ofType(fromActions.ADD_TASK),
  switchMap(() =>
    this.taskService.GetTasks().pipe(
      map(
        (data: Task[]) => new SomeActionYouGot(data);
      ),
      catchError(error =>
        of(new SomeOtherActionThatIndicatesFailFor(data))
      )
    )
  );
0 голосов
/ 05 декабря 2018

В RXJS, внутри оператора карты, вам нужно возвращать значения, которые будут получены, когда наблюдатель подпишется.

    @Effect() 
  loadTasks$: Observable<Task[]> = this.actions$
    .ofType(fromActions.ADD_TASK).pipe(
    switchMap(() => ({this.taskService.GetTasks().map(data => {
            return data; })            
      })) 

    );
...