【发布时间】:2017-03-20 05:31:01
【问题描述】:
我已经使用 RxJS 成功地将更大的 Excel 计算迁移到 JS。当任何 Excel 公式使用多个输入时,任何输入数据都表示为 Observable,随后的计算通过 .map 和 .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 谢谢。不幸的是,这不起作用,因为 c$ 的更新将被忽略,直到 a$ 或 b$ 再次发出。 :-(
-
是的。我明白了,现在。看到解决方案会很有趣。我可以想到一个涉及调度程序的相当不愉快的黑客攻击,但是......必须有更好的方法。
-
@cartant 我希望如此 - 几周以来一直在为这个问题挠头,但根本看不到任何解决方案
标签: javascript rxjs rxjs5 ngrx