AngularJS:从函数返回数据并将其分配给变量

时间:2016-08-10 08:24:24

标签: javascript angularjs asynchronous promise

我是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
    })
}

我想将所有对象存储在变量中,但结果是未定义的。

在控制台中输出

数据未定义

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

4 个答案:

答案 0 :(得分:6)

您需要了解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)

}

答案 1 :(得分:2)

为什么'未定义?

您的函数$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();
  

在角度设置为$ scope时,即使它是异步数据也是如此   很快数据已到达angular将更新您的视图和范围。

答案 2 :(得分:1)

您不能以这种方式使用异步回调。在您的特定情况下,您应该在成功回调中设置$ scope.friendsList。

error: borrowed value does not live long enough
        self.0.borrow().values.get(idx)
        ^~~~~~~~~~~~~~~
reference must be valid for the anonymous lifetime #1 defined on the block at 23:54...
    pub fn value(&self, idx: usize) -> Option<&Value> {
                                                      ^
note: ...but borrowed value is only valid for the block at 23:54
    pub fn value(&self, idx: usize) -> Option<&Value> {
                                                      ^

答案 3 :(得分: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;
 }

这是asynchronus调用,这就是你未定义的原因