簡體   English   中英

使用Observable.if時,一個分支中的函數始終運行

[英]Function in one branch always runs when use Observable.if

我正在使用Observable.if來確定應該調度哪個動作。

下面的代碼由於為true ,因此僅調度ACTION1 ,這是正確的。

但是,我發現myFunction()也正在運行,這沒想到。

任何解釋都很好。 謝謝

myFunction() {
  console.log('I did not expect this run');
  return 1;
}

export const myEpic = (action$, store) =>
  action$
    .ofType('ACTION')
    .mergeMap(() =>
      Observable.if(
        () => true,
        Observable.of({ type: 'ACTION1' }),
        Observable.of({ type: 'ACTION2', payload: myFunction() })
      ));

問題是, myFunction需要,當參數傳遞給被評估Observable.of和結果Observable.of傳遞給Observable.if作為參數,所以它的計算時Observable.if被稱為-不是當Observable.if收到next通知。

要解決此問題,請將其包裝在Observable.defer調用中:

import 'rxjs/add/observable/defer';
// ...
export const myEpic = (action$, store) =>
  action$
    .ofType('ACTION')
    .mergeMap(() =>
      Observable.if(
        () => true,
        Observable.of({ type: 'ACTION1' }),
        Observable.defer(() => Observable.of({ type: 'ACTION2', payload: myFunction() }))
      ));

然后將對Observable.of的調用(以及對myFunction的調用)推遲到Observable.if收到next通知為止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM