等待,直到其他可观察订阅下一
问题描述:
我有一个观察的,将认购像往常一样:等待,直到其他可观察订阅下一
return oMassChangeOb
.subscribe(function (aMassDates) {
const oModel = self.getModel("vmCalSpecialDates");
oModel.setProperty("/aActualDates", aMassDates);
}, function (oErr) {
jQuery.sap.log.fatal(oErr);
});
我的问题是,如何尽快上述观察到的已认购运行其他观察到的?
我能做到这一点如下:
return oMassChangeOb
.subscribe(function (aMassDates) {
const oModel = self.getModel("vmCalSpecialDates");
oModel.setProperty("/aActualDates", aMassDates);
oSaveCancelFooterStateOb
.subscribe(function (oBtnState) {
const oModel = self.getModel("vmButtonsState");
oModel.setProperty("/bSave", oBtnState.bSave);
oModel.setProperty("/bCancel", oBtnState.bCancel)
});
}, function (oErr) {
jQuery.sap.log.fatal(oErr);
});
但我不知道,如果是正确的道路要走。
有一个notification object可以解决的情况,但不知道如何使用它。
答
从你写什么,你基本上要运行第二个观察到的第一个结束之后,在这种情况下,刚刚链中成流:
return oMassChangeOb
.do(function (aMassDates) {
const oModel = self.getModel("vmCalSpecialDates");
oModel.setProperty("/aActualDates", aMassDates);
})
.switchMapTo(oSaveCancelFooterStateOb)
.do((oBtnState) => {
const oModel = self.getModel("vmButtonsState");
oModel.setProperty("/bSave", oBtnState.bSave);
oModel.setProperty("/bCancel", oBtnState.bCancel)
}).subscribe(
undefined,
onErr => jQuery.sap.log.fatal(oErr)
);
如果订单没有按”牛逼事你可以同时流和使用merge
:
Rx.Observable.merge(oMassChangeOb, oSaveCancelFooterStateOb)
.subscribe(
undefined,
onErr => jQuery.sap.log.fatal(oErr)
);
作为一般注释:试用将尽可能多的逻辑移入流本身(例如,通过使用.do
,正如我上面所做的那样)并且认购尽可能干净和通用,这将使得将多个流合并(合并,连接等)变得更容易,例如:
let preparedOMassChangeOb = oMassChangeOb
.do(function (aMassDates) {
const oModel = self.getModel("vmCalSpecialDates");
oModel.setProperty("/aActualDates", aMassDates);
})
.catch(..some error-handler-logic...);
let preparedOSaveCancelFooterStateOb = oSaveCancelFooterStateOb
.do((oBtnState) => {
const oModel = self.getModel("vmButtonsState");
oModel.setProperty("/bSave", oBtnState.bSave);
oModel.setProperty("/bCancel", oBtnState.bCancel)
});
Rx.Observable.merge(
preparedOMassChangeOb,
preparedOSaveCancelFooterStateOb
).subscribe();