Le mie funzioni sono le seguenti: -
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 () {
})
}
Ecco come appare Angular (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;
}
}
risposte:
1 per risposta № 1Se stai usando ES6 puoi usare let
invece di var
nel ciclo come questo for (let i = 0; i < 5; i++) {
quindi con let
il tuo codice funzionerà, come questo semplice esempio
for (let i=0;i<5;i++){
setTimeout(()=> console.log(i),0);
}
Questo è possibile a causa della natura di portata del blocco del let
parola chiave
Se non usi ES6, fai una copia della variabile i in un loop come questo
for (var i=0;i<5;i++){
(function(j){
setTimeout(()=> console.log(j),0)
})(i);
}
Puoi trovare un'ottima spiegazione qui https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20%26%20closures/ch5.md#loops--closure