NgRx效果结合RxJS运算符

时间:2020-03-27 10:33:00

标签: angular rxjs ngrx

有人知道为什么"AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect" : "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS" : "<Account-ID-of-Account-A>" } } ] } 运算符不起作用吗?

我尝试改用第二个switchMap运算符,但是它起作用了,但是我不明白为什么map不起作用。

switchMap

1 个答案:

答案 0 :(得分:0)

仅使用map运算符代替switchMap,如下所示:

@Effect()
  createPizzaSuccess$ = this.actions.ofType(fromPizzasActions.CREATE_PIZZA_SUCCESS).pipe(
      map(action => action.payload),
      map(pizza => new fromRouterActions.Go({path: ['products', pizza.id]})) 
);

switchMap运算符期望Observable。例如,要返回HttpClient.get的结果:

@Effect()
  createPizzaSuccess$ = this.actions.ofType(fromPizzasActions.CREATE_PIZZA_SUCCESS).pipe(
  map(action => action.payload),
  switchMap(pizza => this.httpClient.get(URL)) 
);

但是在您的情况下,发出的值只是一个Action,因此map运算符是正确的选择,就像您从payload中提取action一样。 / p>

还请注意,switchMap需要一个流,您可以提供Observable,Promise,Array或Iterable。

这意味着,在NgRx的情况下,对于一个effect返回多个动作可能很有用,因此一系列动作:

@Effect()
  createPizzaSuccess$ = this.actions.ofType(fromPizzasActions.CREATE_PIZZA_SUCCESS).pipe(
  map(action => action.payload),
  switchMap(pizza => [
    new fromUIActions.showNotification({ message: 'Pizza loaded' }),
    new fromRouterActions.Go({path: ['products', pizza.id]})
  ]) 
);

更多说明: