javascript函数不返回未定义的值

时间:2015-03-19 11:38:48

标签: javascript angularjs

我有以下angularjs功能:

this.loadDocument = function() { 
                var documents = [];
                 alert("load documents"); 
                $http({
                     url: 'http://localhost:8085/api/jsonws/dlapp/get-file-entries/repository-id/10182/folder-id/0',
                     method: 'get',             
                     headers: {
                            "Authorization": this.makeAuth(this.username,this.password)
                     }
            }).success(
                    function(response) {
                        alert("sucess");                        
                        documents=response;
                    });
              return documents; 
         };

我从以下代码中调用它:

$scope.loadDocument = function() {
        $scope.documents=documentService.loadDocument();

    }

但是函数的返回值是未定义的。因为它在执行ajax调用的成功方法之前返回值。

有什么解决方案吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

你需要使用promises。

this.loadDocument = function() { 

        return $http({
                     url: 'http://localhost:8085/api/jsonws/dlapp/get-file-entries/repository-id/10182/folder-id/0',
                     method: 'get',             
                     headers: {
                            "Authorization": this.makeAuth(this.username,this.password)
                     }
            }).then(
                    function(response) {
                       return response;
                    });
         };

loadDocument()函数现在返回一个promise,只有在Ajax调用完成时,才能在控制器中使用它来更新$ scope.documents。

 $scope.loadDocument = function() {
           documentService.loadDocument().then(
                 function(result){
                 $scope.documents= result;
           }); 
 }

答案 1 :(得分:-1)

$ http服务的角度返回一个承诺,所以你需要返回这样的承诺:

this.loadDocument = function() {
    return $http({
        url: 'http://localhost:8085/api/jsonws/dlapp/get-file-entries/repository-id/10182/folder-id/0',
        method: 'get',
        headers: {
            "Authorization": this.makeAuth(this.username, this.password)
        }
    });

然后你致电诺言并等待成功或失败:

    $scope.loadDocument = function() {
       documentService.loadDocument().then(function(response){
          //the promise success
          $scope.documents = response.data;
       }).catch(function(err) {
          //the promise failed
       })

 }