2015-03-19 4 views
0

я имею следующие функции: angularjsJavascript функция не возвращает неопределенное значение

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(); 

    } 

но возвращаемое значение из функции undefined.because возвращается значение до успешного метода выполнения ajax-вызова.

есть ли решение?

Заранее спасибо.

+0

вы можете передать обратный вызов * по какой-либо причине. * Используйте эту возможность и выполните свою обработку в соответствующем обратном вызове. –

+0

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call) – JJJ

ответ

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

} 
+0

Вы должны верните созданное обещание (из $ http service) в конце 'loadDocument' – mshaaban

+0

Да, я знаю, я прощаю, чтобы добавить это спасибо за это. – Bazinga

+0

'return response;' строка абсолютно бесполезна, и комментарий там неправильный. '.success', в отличие от' .then' не является цепным, поэтому эта строка фактически ничего не возвращает - ваш '.success' там бесполезен. @NisargPujara –

0

Вам нужно использовать обещания.

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() теперь возвращает обещание, которое вы можете использовать в контроллере для обновления $ scope.documents только после завершения вызова Ajax.

$scope.loadDocument = function() { 
      documentService.loadDocument().then(
       function(result){ 
       $scope.documents= result; 
      }); 
} 
Смежные вопросы