为什么 observable 没有被订阅

Why observable does not get subscribed

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

代码片段如下所示:

  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 验证,如果模型上发生了某些变化,则它是一个冷可观察对象。

第二个 Observable oDelBtnOb 是一个热 Observable,它监听鼠标按钮点击。

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

Subscribe 1
Subscribe 2

但我只有

Subscribe 2

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

更新

看看下面的代码片段:

//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))

当我点击文档时,我希望 true 会输出两次。

据我了解,您的期望不正确。在您的最后一个示例中,将发生以下情况:

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