无法使用AngularJS调用另一个函数

时间:2015-04-28 16:10:30

标签: javascript angularjs

我想在另一个中调用一个函数。

要调用的函数返回true或false:

$scope.verifsubdir = function(dir, tocheck) {
    $http({method: 'GET', url: '/checkIsSubdir/'+dir+'/'+tocheck})
    .success(function(result) {
        return result.data;
    })
    .error(function(result) {
        console.log("checksubdir oops");
    });
};

另一个函数中的函数调用:

$scope.CopyFiles = function(destination) {
    for(var i=0; i<$scope.list.length; i++) {
        console.log($scope.verifsubdir($scope.list[i],destination));
    };
}

但我总是得到undefined

然而,当我合并这两个函数时,我得到了真或假:

$scope.CopyFiles=function(destination){
    for(var i=0; i<$scope.list.length; i++){
        $http({method: 'GET', url:  
            '/checkIsSubdir/'+$scope.list[i]+'/'+destination})
        .success(function(result) {
            console.log("checkdir "+result.data);
        })
        .error(function(data, status, headers, config) {
            console.log("checksubdir oops");
        });
    }
};

我希望他们分开。如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

$http调用中返回一个承诺,你应该做这样的事情:

$scope.verifsubdir($scope.list[i],destination).then(function(resp) {
   console.log(resp);
   // assuming the response returns a boolean
   $scope.list[i].verified = resp
});

答案 1 :(得分:0)

使用Angular中的$http会给你一个Promise(你可以在the documentation for $q中阅读更多关于它们的内容),并且不会让你的函数自己返回任何值(这就是你得到的原因) undefined)。

您的第一个函数需要返回承诺,然后您需要在.success(...)函数中添加其他.error(...)CopyFiles个回调:

$scope.verifsubdir = function (dir, tocheck) {
  // Simply add return in front of $http here.
  return $http(...
};

$scope.CopyFiles = function (destination) {
  for (var i = 0; i < $scope.list.length; i++) {
    $scope.verifsubdir($scope.list[i], destination).success(function (result) {
      console.log("checkdir " + result.data);
    });
  }
};