ObservablesとReactive Programming rxjsの新機能です。リアクション/レクセス・アプリケーションにライブラリredux-observableを追加しました。startWith operator Rxjsが期待どおりに動作しない
ログイン処理の叙事詩を作成しました。基本的には、LOGIN_REQUESTアクションが実行されると、最初はSET_LOADINGアクションを起動し、操作中は回転ホイールを表示します完了したら、サーバーにユーザーを取得するために休憩を要求します。
これは私が書いたコードです:
const loginEpic = (action$) => {
console.log('EPIC LOGIN EXECUTED');
return action$.filter(action => action.type === LOGIN_REQUEST)
.mergeMap(action => ajax.post(getUrl(constants.LOGIN),
action.payload))
.map(response => setUser(response.response))
.takeUntil(action$.ofType(LOGIN_REQUEST_CANCELLED));
.startWith(setLoading(true));
};
私は(これは私が期待する動作です)とすぐにLOGIN_REQUESTが発射されるSET_LOADINGアクションを起動するためにオペレータstartWithを使用しています。 しかし、アプリケーションが最初にロードされたときに、以前のLOGIN_REQUESTアクションを使用せずにSET_LOADINGアクションが起動される理由はわかりません。
問題がstartWith演算子に関連していることはわかっています。これを削除すると、SET_LOADINGアクションは起動されないためです。だから、私は何が間違っているの?このSET_LOADINGアクションがLOGIN_REQUESTアクションの後だけでなく、常に起動されるのはなぜですか?
おかげ
私はあなたが.startWith演算子が何を誤解することができると思います。 http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html 例では、setLoading(true)が直ちに呼び出され、その戻り値が観測可能なストリームに入ります – wywong