AngularJS:从函数返回数据并将其赋值给变量

7

我刚接触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
    })
}

我想把所有的对象存储在一个变量中,但是结果显示为 undefined。

控制台输出

数据 undefined

[对象,对象,对象,对象,对象,对象]

4个回答

9

您需要了解Angular Promise

这个问题与异步操作有关。

您可以通过正确的thenable链式操作来解决它,您可以这样做。

$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)

}

2

为什么会是undefined呢?

你的函数$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将更新您的视图和作用域。

1
在这种方式下,您无法使用异步回调。在您的特定情况下,您应该在成功回调函数中设置$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
    })
}

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;
 }

这是异步调用,所以你得到了未定义的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接