为什么可观察不会被订阅

时间:2017-01-06 07:55:52

标签: javascript rxjs rxjs5

我有以下observable,验证模型的更改。

代码段如下所示:

avg = ((3.5 * a) + (7.5 * b)) / (3.5 + 7.5);

const oSaveCancelStateOb = this.determineSaveCancelStateOb(oTableItemChanges, oSaveCancelStateModelOb); oSaveCancelStateOb.subscribe(function (oOb) { console.log("Subscribe 1"); }); oDelBtnOb .switchMapTo(oSaveCancelStateOb) .subscribe(function (oOb) { console.log("Subscribe 2"); }); 的实施如下:

determineSaveCancelStateOb

determineSaveCancelStateOb: function (oInspectionServiceOb, oSaveCancelStateModelOb) { return oInspectionServiceOb .map(function (bState) { return bState ? {bSave: true, bCancel: true} : {bSave: false, bCancel: false}; }) .switchMap(function (oState) { return oSaveCancelStateModelOb .map(function (oModel) { return {oModel: oModel, oState: oState}; }) }); }, 验证,如果模型上的某些事情发生了变化,那就是冷可观察。

第二个可观察的oSaveCancelStateOb是一个热门观察者,它会在鼠标按钮上点击。

我的期望是,当我点击按钮时,它应该在控制台上显示我:

oDelBtnOb

但我只有

Subscribe 1
Subscribe 2

为什么第一个observable没有订阅?

更新

请查看以下代码段:

Subscribe 2

当我点击文档时,我希望//Create an observable that emits a value every second const sample1$ = Rx.Observable.of(true); sample1$.subscribe(val => console.log(val)) //Create an observable that emits every time document is clicked const sample2$ = Rx.Observable.fromEvent(document, 'click'); sample2$.switchMapTo(sample1$).subscribe(val => console.log(val)) 将输出两次。

1 个答案:

答案 0 :(得分:1)

我理解你的期望不正确的代码。在上一个示例中,将发生以下情况:

  1. 加载代码后,sample1$上的订阅将执行并处理流中的所有值,并为每个可用值将其发送到控制台。之后sample1$订阅完成。
  2. 点击文档后,switchMapTo对新的sample1$流进行了处理,其值(仅true)被发出并发送到控制台,之后此观察结果完成。