2016-07-31 73 views
0

我只是想問一下關於$ http和promise的用法,我似乎對如何正確使用它有一個問題的理解,我已經準備好了一些線程和如何實現的指南,我可能誤解了但這是我所做的。我儘可能簡單地讓它掌握它。

this.getAll = function(){ 
    var details = []; 

    var deffered = $q.defer(); 

    var promise = $http.get('../test_data/patient_list.json'); 

    promise.then(function(response){ 
     $log.debug(response.data); 
     angular.copy(response.data, details); 
     details = response.data 
    }); 

    return details; 
}; 

期間promise.then()數據確實存在,但是當我嘗試後promise.then調用它複製到另一個陣列details是空的。怎麼來的? IM現在有點糊塗了,任何人都可以點或教我如何妥善處理$http

回答

1
this.getAll = function(){ 
var details = []; 

var deffered = $q.defer(); 

var promise = $http.get('../test_data/patient_list.json'); 

return promise.then(function(response){ 
    $log.debug(response.data); 
    angular.copy(response.data, details); 
    details = response.data 
    return details; 
}); 

}; 

你必須返回的承諾,然後返回.then()塊內的相關內容。

你也可以做到以下幾點:

this.getAll = function(){ 
return $http.get('../test_data/patient_list.json') 
    .then(function (response) { 
    return response.data 
    }); 
} 
+0

喔但哪裏「遞延」進來這幅畫? – lemoncodes

+0

@lemoncodes推遲是處理promiese的另一種方式,尤其是當您將某個回調函數或非promise函數調用包裝爲承諾時。默認情況下,$ http.get()返回一個承諾,所以我們不需要$ q.defer() –

+0

是的,我試過上面的代碼,但是當我返回「細節」時,它返回了承諾,我預計實際數據要返回?,我想我誤解了代碼的返回部分.. – lemoncodes