[英]rxjs Observable.if always executes both statements when using map
[英]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.