2016-08-10 3 views
3

私はangularjsを初めて使用しています。関数から別の関数にデータを戻して変数に格納しようとしています。AngularJS:関数からデータを戻して変数に代入する

$scope.myNameValidate = function(name){ 
    $scope.friendsList = $scope.getAllFriends(name); 
    console.log("data", $scope.friendsList); 
} 

$scope.getAllFriends = function(name){ 
    friendService.getAllfriends(name) 
    .then(function(data){ 
     //success 
     console.log(data); 
    }, function(err){ 
     //error 
    }) 
} 

すべてのオブジェクトを変数に保存したいが、結果として定義されていない。コンソールで

出力不定

データ

[オブジェクト、オブジェクト、オブジェクト、オブジェクト、オブジェクト、オブジェクト]

答えて

5

あなたがAngular promiseを知っている必要があります。

この問題はAsynchronousの動作に関連しています。

適切なthen連鎖で修正することができます。 このようにすることができます。

$scope.myNameValidate = function(name) { 
    $scope.getAllFriends(name) 
     .then(function(data) { 
      $scope.friendsList = data; 
      console.log(data); 
     }, function(err) { 
      //error 
     }); 

} 

$scope.getAllFriends = function(name) { 
    return friendService.getAllfriends(name) 

} 
+0

は... – Raghav

1

このように非同期コールバックを使用することはできません。あなたの特定のケースでは、$ scope.friendsListをsuccessコールバックの中に設定するべきです。

$scope.myNameValidate = function(name) { 
    $scope.getAllFriends(name); 
} 

$scope.getAllFriends = function(name) { 
    friendService.getAllfriends(name) 
    .then(function(data) { 
     $scope.friendsList = data; 
     console.log("data", $scope.friendsList); 
    }, function(err){ 
     //error 
    }) 
} 
+0

はアレクセイ – Raghav

1
$scope.myNameValidate = function(name){ 
$scope.friendsList = $scope.getAllFriends(name) 
    .then(function(data){ 
    //here is your data 
    }) 
    .catch(error){ 
    //Error 
    } 
console.log("data", $scope.friendsList); 
} 

$scope.getAllFriends = function(name){ 
    var promise = friendService.getAllfriends(name) 
    .then(function(data){ 
    return data; 
    }, function(err){ 
    //error 
}) 
return promise; 
} 

これは、なぜその未定義あなたは

+0

があなたの応答のためにどうもありがとうございますありがとうございました...それは私のために働いた...あなたの応答のために多くご説明メイトのため – Raghav

1

を未定義だ理由asynchronus通話がthatsのでしょうか?

あなたの関数$scope.getAllFriends()は、$ scope.friendsListにデータを設定することはできません。角度で

function myFunc(){ 
var i = 5; 
} 
var myVar = myFunc(); 

myVar will not have value 5. 

function myFunc(){ 
var i = 5; 
return i; 
} 
var myVar = myFunc(); 

あなたは$スコープに設定した場合 すぐにデータは角到着したとして、それは非同期データだ場合でも、あなたの視野と範囲を更新します。

+1

感謝をありがとう – Raghav

関連する問題