Dojo Store / QueryResults基于现有的具有回调的Async函数

时间:2017-06-26 16:35:47

标签: javascript callback dojo promise deferred

我正在尝试按照此处所述创建Dojo商店https://dojotoolkit.org/documentation/tutorials/1.10/creating_stores/但是我需要在查询中实现现有的数据检索API。特别是来自https://apidocs.mendix.com/7/client/mx.data.html

的Mx.data.get

我的QueryResults一直是空的,我想这是因为我使用的API使用回调并且没有提供承诺。

query: function (query, options) {    
  var deferred = new Deferred();
  this.getResults(query, function (error, result) {
    if (error) {
      deferred.reject(error);
    } else {
      deferred.resolve(result);
    }
  });
  return QueryResults(deferred.promise);
},

getResults: function (query) {
  mx.data.get({
    xpath: "//System.User",
    filter: {
      sort: [["Name", "asc"]],
      offset: 0,
      amount: 10
    },
    callback: function(objs) {
      return(objs);
    }
  });
}

我看到代码已执行,但结果objs永远不会返回,QueryResults始终为空。 (我也试过QueryResults(deferred),但效果相同。

此处的任何人都可以帮助我mx.data.get在制作QueryResults时使用{/ 1}}吗?

1 个答案:

答案 0 :(得分:0)

第二天早上一切都很清楚:只需要在回调中移动deferred.resolve

query: function (query, options) {    
  this.deferred = new Deferred();
  this.getResults(query);
  return QueryResults(deferred);
},

getResults: function (query) {
  mx.data.get({
    xpath: "//System.User",
    filter: {
      sort: [["Name", "asc"]],
      offset: 0,
      amount: 10
    },
    callback: lang.hitch(this, function(objs) {
        this.deferred.resolve(objs);
      });
    }
  });
}