2013-12-10 15 views
-1

我寫angularJS的控制器內的一個簡單的Java腳本函數,

$scope.getwork = function(taskData){ 

    $scope.workData = workData; 
    var i =0; 
    do{ 
     var getworkQuery = CommunicationsService.getGetworkValue($scope.workData.requestId, $scope.workData.waitTime); 
     getworkQuery.query({},function(resp1,$scope){ 
      $scope.getTaskValue=resp1; 
      console.log("inside getTaskAttri "); 
      console.log($scope.getTaskValue); 
      console.log($scope.getTaskValue.status); 
      console.log($scope.getTaskValue.errorMessage); 
      i++; 
     }); 
    }while($scope.getworkValue.status == 'processing' && i<3); 

} 

在這裏,我得到錯誤,

TypeError: Cannot read property 'status' of undefined 
    at Object.$scope.getTaskAttri (http://127.0.0.1:7002/vtmui/views/js/Controllers/GetWorkController.js:128:31) 
    at http://127.0.0.1:7002/vtmui/views/js/Controllers/GetTaskController.js:102:24 
    at http://127.0.0.1:7002/vtmui/views/lib/angular/angular-resource.js:413:30 
    at wrappedCallback (http://127.0.0.1:7002/vtmui/views/lib/angular/angular.js:6995:59) 
    at http://127.0.0.1:7002/vtmui/views/lib/angular/angular.js:7032:26 
    at Object.Scope.$eval (http://127.0.0.1:7002/vtmui/views/lib/angular/angular.js:8218:28) 
    at Object.Scope.$digest (http://127.0.0.1:7002/vtmui/views/lib/angular/angular.js:8077:25) 
    at Object.Scope.$apply (http://127.0.0.1:7002/vtmui/views/lib/angular/angular.js:8304:24) 
    at done (http://127.0.0.1:7002/vtmui/views/lib/angular/angular.js:9357:20) 
    at completeRequest (http://127.0.0.1:7002/vtmui/views/lib/angular/angular.js:9531:7) angular.js:5930 
inside getTaskAttri GetTaskController.js:122 
Resource {requestId: "2641991", status: "failure", errorMessage: "Communication failure during execution process.", waitTime: 0, workLsit: Array[0]…} 
failure 
Communication failure during execution process. 

console.logdo..while循環內是越來越顯示,但它顯示在while循環未定義錯誤用於可變$scope.getworkValue.status

while($scope.getworkValue.status == 'processing' && i<3);

任何想法如何解決這個問題?

+5

歡迎來到**異步**的美妙世界!你不能那樣做。 – SLaks

+2

看看這有助於http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call – elclanrs

+0

@Slaks我瞭解aysnc功能。是否有任何方法可以達到我的要求。我需要做一個ajax調用,直到$ scope.getworkValue.status ='處理'或最多3次。有什麼建議麼? –

回答

0

我能解決使用$廣播問題和$ on.Here是我的解決方案,

$scope.getwork = function(taskData){ 
    $scope.workData = workData; 
    var getworkQuery = CommunicationsService.getGetworkValue($scope.workData.requestId, $scope.workData.waitTime); 
     getworkQuery.query({},function(resp1,$scope){ 
      $scope.getTaskValue=resp1; 
      $rootScope.$broadcast("taskWork_received",resp1); 
     }); 
} 

    $scope.$on("taskWork_received", function(scope,taskWorkReceived){ 
    $scope.getWorkValue=taskWorkReceived; 
    switch($scope.getWorkValue) 
    { 
     case 'processing': 
      getwork($scope.workData); 
      break; 
     default: 
      alert("no response"); 
      break; 
    } 
}); 

希望這可以幫助其他人。請讓我知道這個解決方案是否有問題。但它對我來說工作正常。

相關問題