2014-11-03 52 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