我已經使用RxJS成功將更大的Excel計算遷移到JS。任何輸入數據都表示爲Observable,隨後任何Excel公式使用多個輸入時,將使用.map
和.combineLatest
執行後續計算。計算鏈中的其他運算符比combineLatest以避免冗餘計算
三個輸入(a$=1
,b$=2
,c$=3
)在兩個不同的計算($ab = $a+$b = 3
在第一,第二$bc = $b+$c = 5
)作爲中間步驟來計算的最終結果$abbc = $ab + $bc = 8
被使用。當$ b現在被更新/發出一個新的輸入值(例如4
)時,$ abbc會被計算兩次 - 首先當$ ab被更新時(導致錯誤的結果$abbc=10
),並且當$ bc被更新時,在正確的結果12
。
儘管最終結果是正確的,但中間計算既錯誤又冗餘。如果$b
得到更新,是否有任何方法只執行最後一次計算 - 同時在更新a$
或c$
(這將排除zip運算符)時仍然更新計算。我明白,這個例子顯然可以簡化爲省略中間步驟,並直接從$a
,$b
和$c
計算$abbc
- 但在真實的示例中,這是不可行的。
下面是JSbin運行例如:https://jsbin.com/pipiyodixa/edit?js,console
'abbc $ = ab $ .withLatestFrom(bc $,(ab,bc)=> ab + bc)'會影響所需的行爲,但是... ...我沒有充分理解語義這種情況,所以這是一個評論。 – cartant
@cartant謝謝。不幸的是,這將無法正常工作,因爲c $的更新將被忽略,直到$或b $再次發出。 :-( –
是的,我現在看到了,看到解決方案會很有趣,我可以想到涉及調度程序的一個相當不愉快的攻擊,但是......必須有一個更好的方法。 – cartant