gpt4 book ai didi

javascript - 为什么 observable 没有被订阅

转载 作者:行者123 更新时间:2023-12-03 05:18:26 24 4
gpt4 key购买 nike

我有以下可观察的内容,用于验证模型上的更改。

代码片段如下:

  const oSaveCancelStateOb = this.determineSaveCancelStateOb(oTableItemChanges, oSaveCancelStateModelOb);
oSaveCancelStateOb.subscribe(function (oOb) {
console.log("Subscribe 1");
});

oDelBtnOb
.switchMapTo(oSaveCancelStateOb)
.subscribe(function (oOb) {
console.log("Subscribe 2");
});

defineSaveCancelStateOb 的实现如下所示:

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

但我只有

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

当我单击文档时,我预计 true 将输出两次。

最佳答案

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

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

关于javascript - 为什么 observable 没有被订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41501354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com