【问题标题】:SAPUI5 Wait for an Deferred-Object // wait for .done() functionSAPUI5 等待延迟对象 // 等待 .done() 函数
【发布时间】:2014-11-03 17:31:39
【问题描述】:

我知道这有几个线程,但我认为在 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() 在我的视图中继续?

【问题讨论】:

    标签: jquery ajax jquery-deferred sapui5 .when


    【解决方案1】:

    () 运算符调用该函数。您正在自己调用该函数,then 方法未调用该函数。发生的情况是您调用 log 函数并将其返回值设置为处理程序。由于您想将参数传递给console.log 方法,您可以使用匿名函数:

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

    【讨论】:

    • 你认为嵌套多个 then-functions 有问题吗?让我们说 10 次,因为我必须依次等待几个后端调用?
    • @zyrex 您可以将几个 deferred/promise 对象传递给$.when,然后在所有这些对象都解决后调用then 处理程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    相关资源
    最近更新 更多