SAPUI5 Wait for an Deferred-Object // wait for .do

2019-03-05 02:49发布

I know there are several threads on this, but I think in SAPUI5 context no thread answers this general topic on deferred/sync calls in SAPUI5.

In My Controller I got :

  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();

  },

in My view I am calling the method AND I want to wait for the result, how to I manage it correctly?

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

also this approach does not wait:

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

As expected, test is undefined, "finished" is logged, and when .done from method is ready, it is logged. but I want to wait for it (and in best case return data from ajax back)..

how do I wait for post.done() to continue in my view?

1条回答
劫难
2楼-- · 2019-03-05 03:39

() operator invokes the function. You are invoking the function yourself, the function is not called by the then method. What happens is you call the log function and it's returned value is set as the handler. Since you want to pass an argument to the console.log method, you can use an anonymous function:

dfd.resolve(data);

// ...

$.when(oController.test()).then(function(data) {
    console.log('finished', data);
});
查看更多
登录 后发表回答