/ / Come accedere alla matrice cliente per indice in richiesta Ajax - angularjs, ajax, angular-promise

Come accedere alla matrice cliente per indice in richiesta Ajax - angularjs, ajax, angular-promise

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 № 1

Se 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