2014-11-03 73 views
0

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

在我的控制器我:SAPUI5等待延期对象//等待.done()函数

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

()运算符调用该函数。您正在调用该函数,该函数不会被then方法调用。会发生什么情况是您调用log函数,并将返回值设置为处理程序。既然你想传递一个参数到console.log方法,你可以使用匿名函数:

dfd.resolve(data); 

// ... 

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

谢谢你,它的工作! – zyrex 2014-11-03 09:24:44

+0

@zyrex欢迎您! – undefined 2014-11-03 09:31:52

+0

你认为它是一个嵌套多个函数的问题吗?可以说10次,因为我必须在一个序列中等待几个后端调用? – zyrex 2014-11-03 10:37:52