我有延期對象的鏈接的一些問題。所以我認爲我缺少一些理解。我的代碼是一樣的東西如下:Javascript - 承諾問題,然後()和完成()鏈中的方法
var AJAX_FUNC_CREATE_ALIAS = function(){
return $.when(ajax_call()).then(function(response){
// DO something with the response I get to compose an object
return composed_response;
});
}
var name = 'Alejandro',
alias = 'Ali';
$.when(AJAX_FUNC_CREATE_NAME)).then(function(response, status, jqXHR){
return AJAX_FUNC_CREATE_ALIAS(name); // <-- Wait correctly
},function(jqXHR, status, errorThrown){
return default_response;
}).done(function(artist_response){
var promise = AJAX_FUNC_CREATE_ALIAS(alias); // <----- Problematic one
console.log(promise.state()); // It shows pending state
return promise;
}).done(function(alias_response){
$.publish(channel, [alias_response])
});
執行是這樣的:
的AJAX_FUNC_CREATE_NAME功能開始執行。完成後,它轉到在then()中定義的回調。
它執行AJAX_FUNC_CREATE_ALIAS(name)函數。在AJAX_FUNC_CREATE_ALIAS(name)完成之前,.done()方法不會執行。
它開始執行AJAX_FUNC_CREATE_ALIAS(別名);在這裏它不會等待從服務器獲得答案。它直接到$ .publish(....)
爲什麼?
更新:我添加了一些代碼來檢查我從問題行中得到的答案。我得到的承諾似乎有'未決狀態'。從jquery文檔.done()方法:「添加處理程序以便在解析Deferred對象時調用。」 [http://api.jquery.com/deferred.done/]。如果狀態爲掛起......爲什麼done()方法獲取它?
什麼是'。然後(功能(響應){ 返回響應; })'該怎麼辦?它只是應該省略 – Bergi
@Bergi我已經改變了一點點的代碼,以反映我在那裏做了一些處理。對不起......我應該從一開始就把它放在......這只是爲了節省線條。 – kitimenpolku