2016-12-31 97 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();