web-dev-qa-db-ja.com

RxJS iif引数は、呼び出されるべきではないときに呼び出されます

RxJSのiifユーティリティを使用していくつかのアクションを条件付きでディスパッチしたいと思います。問題は、テスト関数がfalseを返しても、iifの2番目の引数が呼び出されることです。これによりエラーがスローされ、アプリがすぐにクラッシュします。私はRxJSの力に慣れていないので、おそらく何かを知りません。そして、それが重要な場合、私はconnected-react-routerパッケージを使用しています。

 export const roomRouteEpic:Epic =(action $、state $)=> 
 action $ .ofType(LOCATION_CHANGE).pipe(
 pluck( 'payload')、
 mergeMap(payload => 
 iif(
()=> {
 console.log( 'NOT LOGGED'); 
 return/^ \/room \/\ d + $ /。test(payload.location.pathname); // '/ login' 
}、
 merge(
 tap(v => console。 log( 'NOT LOGGED TOO'))、
 of(
 //次の状態値がすぐに評価されます
 state $ .value.rooms.list [payload.location.pathname。 split( '/')[1]] 
?actions.rooms.initRoomEnter()
:actions.rooms.initRoomCreate()、
)、
 of (actions.global.setIsLoading(true))、
)、
 empty()、
)、
)、
);
7
E1-XP

監視可能な作成内でタップ演算子を使用すると(voidが返されるため)、以下のようなエラーが発生します

Error: You provided 'function tapOperatorFunction(source) {
return source.lift(new DoOperator(nextOrObserver, error, complete));
}' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

タップを外し、コンソールをsubscribe()に入れます。

stackblitzデモ を作成しました。

1
KiraAG