我有以下观察:
_processSelectedPlantWcOb: function (oSelect) {
let self = this;
return oSelect
.map(function (oEvent) {
// Clean up dates
let oModel = self.getModel("vmCalSpecialDates");
oModel.setProperty("/specialDates", []);
return oEvent.getSource();
})
.map(function (oControl) {
let oItem = oControl.getSelectedItem();
let aKeys = oItem.getKey().split("/");
return {plant: aKeys[0], wc: aKeys[1]};
})
.flatMap(function (oSelectedItem) {
let oModel = self.getModel("weightProtocolService");
let oPlantFilter = new Filter("Plant", sap.ui.model.FilterOperator.EQ, oSelectedItem.plant);
let oWcFilter = new Filter("WorkCenter", sap.ui.model.FilterOperator.EQ, oSelectedItem.wc);
return Rx.Observable.create(function (observer) {
oModel.read("/CostCenterCalendarSet", {
success: function (oData, oResponse) {
observer.next(oResponse);
},
error: function (oError) {
observer.error(oError);
},
filters: [oPlantFilter, oWcFilter]
});
});
})
.map(function (oData) {
return oData.data.results;
})
.filter(function (aData) {
return aData.length > 0;
})
.flatMap(function (aData) {
return Rx.Observable.from(aData)
})
.filter(function (oData) {
let oToday = new Date();
return oData.InspectionDate.getTime() > oToday.getTime();
});
},
假设我有一个实例变量x = false
,将来会更改为x = true
。在第二张地图上,我想询问是否x is true
。如果是,它应该订阅它,流将停在那里。
澄清我的意思。考虑第二张地图。这就是它的样子:
.map(function (oControl) {
if(x === true) {
// Subscribe it. stop the stream
}
let oItem = oControl.getSelectedItem();
let aKeys = oItem.getKey().split("/");
return {plant: aKeys[0], wc: aKeys[1]};
})
答案 0 :(得分:0)
如果您想根据x = true
完成广告系列,我建议您查看takeUntil
运算符,而不是变量x
,请使用Subject
。 x
成为true
时会发出一次。
主题是一个Observable和一个Observer,因此您可以在takeUntil中使用它来让您的流完成。