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
})
}
すべてのオブジェクトを変数に格納したいのですが、結果として未定義になります。
コンソールに出力
未定義のデータ
[オブジェクト、オブジェクト、オブジェクト、オブジェクト、オブジェクト、オブジェクト]
Angular promise を知る必要があります。
この問題は 非同期 操作に関連しています。
適切なthen
ableチェーニングを使用して修正できます。この方法でそれを行うことができます。
$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)
}
なぜ未定義なのか?
あなたの関数$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();
angularでは、$ scopeに設定したときに非同期データであっても、データが到着するとすぐにangularによってビューとスコープが更新されます。
この方法で非同期コールバックを使用することはできません。特定のケースでは、成功のコールバック内で$ scope.friendsListを設定する必要があります。
$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
})
}
$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;
}
これは非同期呼び出しなので、未定義になります