2017-07-17 86 views
1

我的功能看起來如下: -如何通過指數Ajax請求訪問客戶陣列

function getCustomers() { 
     var len = 5; 
     var customers = new Array(len); 
     var _promises = []; 
     for (var i = 0; i < 5; i++) { 

      var p = dataService.get(sData, 'Customer').then(function (data) { 
       if (data.entity === "Customer" && data.id > 0) { 
         //*******I am in need to access customers by index (i)**********; 
         //customers[i] = data.id 
         return alert("loop "+i); 
    //***** Issue-this alerts 5 times "loop 6" ***/////// 
        } 
      }) 

      _promises.push(p); 
      } 


     } 

     $q.all(_promises).then(function() { 

     }) 
    } 

這是怎麼角(DataService的)看起來像

function read(data, entityName) { 
     var url = "API_Url" 
     return $http({ 
      method: 'GET', 
      url: url, 
     }) 
     .then(success) 
     .catch(exception); 

     function success(response){ 
     return response.data; 
     } 
    } 

回答

1

如果您正在使用ES6可以使用let insted var在這樣的循環中for (let i = 0; i < 5; i++) {

然後用let你的代碼就行了,像這個簡單的ex充足的

for (let i=0;i<5;i++){ 
setTimeout(()=> console.log(i),0); 
} 

這是可能的becouse的let關鍵字的區塊範圍性質的

如果不使用ES6你建議立即進行刪除使內部循環變量i的拷貝這樣

for (var i=0;i<5;i++){ 
(function(j){ 
    setTimeout(()=> console.log(j),0) 
})(i); 
} 

你可以在這裏找到很好的解釋https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20%26%20closures/ch5.md#loops--closure

+0

對不起!!我沒有使用ES6 –

+0

感謝您的鏈接 –

+0

哇!驚人的關鍵字我只是用var來取代var而沒有別的符合我的要求。謝謝:) –