我知道这有几个线程,但我认为在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()继续在我看来?
答案 0 :(得分:1)
()
运算符调用该函数。您自己调用该函数,then
方法不调用该函数。如果您调用log
函数,它的返回值将被设置为处理程序。由于您要将参数传递给console.log
方法,因此可以使用匿名函数:
dfd.resolve(data);
// ...
$.when(oController.test()).then(function(data) {
console.log('finished', data);
});