2015-08-19 132 views
0

我試圖使用$ http的方法,因爲我的代碼在請求之後運行,在請求結果返回之前運行。所以我的響應參數是未定義的。

var reqgetcustomers = $http({ 
    url: 'api/customers/GetNbCustomer', 
    params: { 
     'lastName': lastName, 
     'firstName': firstName, 
     'address': address, 
     'town': town, 
     'zipCode': zipCode, 
     'skip': -1, 
     'take': -1 
    } 
}; 

reqgetcustomers.then(function (dataresult) { 
    $scope.itemCount = dataresult.data; 
    var nbPage = Math.ceil($scope.itemCount/$scope.numPerPage); 
    locker.put('nbPage', nbPage); 
    console.log('locker nbPage before=> ', locker.get('nbPage')); 
    console.log('itemCount => ', $scope.itemCount); 
}); 

我使用了請求後的結果,但nbPage變量未定義。

任何幫助將受到歡迎。

謝謝。

+1

我認爲nbPage是未定義的,因爲您沒有定義這個變量$ scope.numPerPage。 –

+0

我只提出了我的請求,所以我的var numPerPage定義在請求之外。請求運行正常,它在api控制器中找到我的動作,但是我的代碼繼續而沒有等待請​​求的結果。 – JonathanTheBrosh

回答

0

我成功了。這是我的新代碼,如果它可以幫助某人:

//create the promise 
    function getCustomersRequest(lastName, firstName, address, town, zipCode, skip, take) 
    { 
     var deferred = $q.defer(); 
     var reqgetcustomers = $http({ 
      url: 'api/customers/GetNbCustomer', 
      params: { 
       'lastName': lastName, 
       'firstName': firstName, 
       'address': address, 
       'town': town, 
       'zipCode': zipCode, 
       'skip': -1, 
       'take': -1 
      } 
     }); 
     reqgetcustomers.success(function (dataResult) { 
      deferred.resolve(dataResult); 
     }); 
     return deferred.promise; 
    } 

    //new method with promise 
    function GetListFiltered(lastName, firstName, address, town, zipCode, skip, take) { 
     var deferred = $q.defer(); 
     var reqSearchCustomers = $http({ 
      url: '/api/customers/GetFilteredList', 
      params: { 
       'lastName': lastName, 
       'firstName': firstName, 
       'address': address, 
       'town': town, 
       'zipCode': zipCode, 
       'skip': skip, 
       'take': take 
      } 
     }); 
     reqSearchCustomers.success(function (dataResult) { 
      deferred.resolve(dataResult); 
      $scope.customers = dataResult; 
     }); 
     var myPromise = getCustomersRequest(lastName, firstName, address, town, zipCode, skip, take); 
     myPromise.then(function (resolve) { 
      $scope.itemCount = resolve; 
      locker.put('itemCount', resolve); 
      locker.put('skip', ((locker.get('currentPage') - 1) * $scope.numPerPage)); 
      var nbPage = Math.ceil(locker.get('itemCount')/$scope.numPerPage); 
      locker.put('nbPage', nbPage); 
      $scope.skip = locker.get('skip'); 
      $scope.nbPage = locker.get('nbPage'); 
    } 
    GetListFiltered(locker.get('lastName'), locker.get('firstName'), locker.get('address'), locker.get('town'), locker.get('zipCode'), $scope.skip, $scope.numPerPage);