如何知道哪个observable触发器在Rx.Observable.combineLatest中发生了变化

use*_*903 9 observable rxjs

我可以使用Rx.Observable.combineLatest,这样我就会在任何可观察到的更改时通知更改.但我怎么知道哪些可观察到的变化呢?

var s1 = someObservable1();
var s2 = someObservable2();
Rx.Observable.combineLatest(s1, s2).subscribe(function(){
    // How to know which Observable triggers combineLatest change

});
Run Code Online (Sandbox Code Playgroud)

Ser*_*lov 7

RxJs无法实现这一目标.不过你可以用额外的状态来做:

var trigger = "";

Rx.Observable
  .combineLatest(
    s1.do(function() { trigger = "s1"; }),
    s2.do(function() { trigger = "s2"; }))
  .subscribe(function(){
    // use trigger
  });
Run Code Online (Sandbox Code Playgroud)

  • 制作一个元组(项目,时间戳)并将其组合在一起,而不是选择带有最后一个时间戳的项目(因为最后一个事件也可以)。拥有外部变量似乎不是正确的方法 (3认同)
  • 看起来很脏,因为我们将状态存储在管道之外。看起来不太好 但绝对有效 (2认同)