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

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

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

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