2017-07-17 47 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而没有别的符合我的要求。谢谢:) –