javascript - 包装 ajax 调用

标签 javascript ajax rxjs

我有一个代码,它将在 select 函数内部发出 ajax 请求。

  oSelect
    .select(function (oEvent) {
      return oEvent.getSource();
    })
    .select(function (oControl) {
      let oItem = oControl.getSelectedItem();
      let aKeys = oItem.getKey().split("/");
      return {plant: aKeys[0], wc: aKeys[1]};
    })
    .select(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);

      oModel.read("/CostCenterCalendarSet", {
        success: function (oData, oResponse) {
          return Rx.Observable.from(oResponse.data.results);

        },
        error: function (oError) {
          return Rx.Observable.throw(oError);
        },
        filters: [oPlantFilter, oWcFilter]
      });
    })
    .subscribe(function (oKey) {
      console.log(oKey);
    },
    function (err) {
      jQuery.sap.log.fatal(err);
    });

我的问题是,它会在 ajax 响应出现之前先订阅。

如何解决这个问题?

最佳答案

假设 RxJS 5,用 mergeMap 替换最后一个选择并返回一个新的可观察值:

.mergeMap(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 new Observable(observer => {
    oModel.read("/CostCenterCalendarSet", {
      success: function (oData, oResponse) {
        observer.next(oResponse.data.results);
      },
      error: function (oError) {
        observer.error(oError);
      },
      filters: [oPlantFilter, oWcFilter]
    });
  });
})

关于javascript - 包装 ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41213043/

相关文章:

javascript - 重新调用返回 Rxjs observable 的函数

javascript - 从另一个 Controller 返回后,ui-grid api 未定义

javascript - 检查 jQuery 数组中的值是否按顺序排列

javascript - _references.js 是做什么用的?

mysql - 按停止按钮时停止 mysql 查询

javascript - 在 Ajax 中使用语法荧光笔 - html 和 python 画笔

javascript - 我怎样才能创建一个多重嵌套列表

jquery - Ajax请求: unexpected identifier

javascript - RxJS 等待 promise 解决

redux - 如何使用 redux-observable 做一个简单的通知系统?