/ / Jak uzyskać dostęp do tablicy klienta według indeksu w żądaniu ajax - angularjs, ajax, angular-promise

Jak uzyskać dostęp do tablicy klienta według indeksu w żądaniu ajax - angularjs, ajax, angular-promise

Moje funkcje wyglądają jak poniżej: -

 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 () {

})
}

Tak wygląda 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;
}
}

Odpowiedzi:

1 dla odpowiedzi № 1

Jeśli używasz ES6, możesz go użyć let wydał z var w takiej pętli for (let i = 0; i < 5; i++) {

następnie z let Twój kod zadziała, jak ten prosty przykład

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

Jest to możliwe z powodu charakteru zakresu bloku let słowo kluczowe

Jeśli nie korzystasz z ES6, powinieneś zrobić kopię pętli i zmiennej wewnętrznej w ten sposób

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

Możesz znaleźć tutaj świetne wyjaśnienie https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20%26%20closures/ch5.md#loops--closure