2016-07-31 15 views
0

私はちょうど約$ httpと約束の使用法について尋ねたい、私は正しく使用する方法についての問題を理解しているようだ、私は実装する方法についていくつかのスレッドとガイドを準備している、私は誤解があるかもしれませんそれがここにあるのです。私はそれを把握するためにできるだけシンプルにしています。

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は空です。どうして?ビットは今混乱イム、することができます誰でもポイントまたは適切にあなたが約束を返す.then()ブロックの内部情報が返されるようにする必要があり$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; 
}); 

}; 

上のデータを処理する方法を教えて。

あなたはまた、次の操作を実行できます。

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

おおが、この絵で来る「deffered」ん? – lemoncodes

+0

@lemoncodes deferredは、プロミスを処理する別の方法です。特に、コールバック関数または非約束関数呼び出しを約束するときに便利です。デフォルトで$ http.get()は約束を返しますので、$ q.defer()が必要です –

+0

はい私は上記のコードを試しましたが、 "details"を返して約束を返したとき、私は実際の返されるデータは?、私はコードの戻り部分を誤解していると思います。 – lemoncodes