SAPUI5等待Deferred-Object //等待.done()函数

时间:2014-11-03 09:05:12

标签: jquery ajax jquery-deferred sapui5 .when

我知道这有几个线程,但我认为在SAPUI5上下文中没有线程回答关于SAPUI5中延迟/同步调用的这个一般主题。

在我的控制器中,我得到了:

  test : function() {

    var dfd = $.Deferred();
    var sServiceUrl = '/sap/opu/odata/sap/xyz/MySet?$format=json';

    var post = $.ajax({
        url: sServiceUrl,
        type: "GET"
    });

    post.done(function(data){
        console.log(data);
        dfd.resolve();
    });

    post.fail(function(){
        console.log("Error loading: " + sServiceUrl);
        dfd.reject();
    });

    return dfd.promise();

  },

在我的视图中我正在调用方法并且我想等待结果,如何正确管理它?

  var test = oController.test();
  console.log(test);
  $.when(test).done().then(console.log("finished"));

此方法也不等待:

$.when(oController.test()).then(console.log("finished"));

正如预期的那样,测试未定义,记录了“完成”,当方法中的.done准备就绪时,将记录该测试。但我想等待它(最好从ajax返回数据)。

如何等待post.done()继续在我看来?

1 个答案:

答案 0 :(得分:1)

()运算符调用该函数。您自己调用该函数,then方法不调用该函数。如果您调用log函数,它的返回值将被设置为处理程序。由于您要将参数传递给console.log方法,因此可以使用匿名函数:

dfd.resolve(data);

// ...

$.when(oController.test()).then(function(data) {
    console.log('finished', data);
});