我有一個昂貴的計算被一個效果調用。我現在想要確保,這個計算不會被同時調用,即如果在第一次調用仍在運行時第二次調用它,則應該忽略第二次調用。如何防止併發效果執行
我對這個問題的解決方法是創建2個操作:calculate和setLoading。
@Effect()
calculate$ = this.updates$
.whenAction(CALCULATE)
.flatMap(data => {
console.debug('LOADING', data.state.loading);
if (!data.state.loading) {
this.store.dispatch(Actions.setLoading(true));
await DO_THE_EXPENSIVE_CALCULATION();
this.store.dispatch(Actions.setLoading(false));
}
});
with Actions.setLoading顯然是設置state.loading。然而,如果我開始計算連續2次:
store.dispatch(Actions.calculate());
store.dispatch(Actions.calculate());
輸出是
LOADING false
LOADING false
,因此,昂貴的計算被執行兩次。 我該如何預防?
你想徹底忽略第二個動作或放入隊列嗎? –