为什么 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
会输出两次。
据我了解,您的期望不正确。在您的最后一个示例中,将发生以下情况:
- 加载代码后,
sample1$
上的订阅将执行并处理流中的所有值,并将每个可用值发送到控制台。之后 sample1$
订阅完成。
- 单击文档后,对新的
sample1$
流执行 switchMapTo
,其值(仅 true
)被发出并发送到控制台,之后可观察到完成。
我有以下 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
会输出两次。
据我了解,您的期望不正确。在您的最后一个示例中,将发生以下情况:
- 加载代码后,
sample1$
上的订阅将执行并处理流中的所有值,并将每个可用值发送到控制台。之后sample1$
订阅完成。 - 单击文档后,对新的
sample1$
流执行switchMapTo
,其值(仅true
)被发出并发送到控制台,之后可观察到完成。