2016-12-31 68 views
1

我有一个观察的,将认购像往常一样:等待,直到其他可观察订阅下一

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可以解决的情况,但不知道如何使用它。

回答

2

从你写什么,你基本上要运行第二个观察到的第一个结束之后,在这种情况下,刚刚链中成流:

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