У меня есть следующий код, который перебирает список отчетов, меняет каждое имя и обновляет его. Он отлично работает, если в списке есть только один отчет, но если есть 2 отчета, то обновляется только второй.
Когда я посмотрел на вкладку сети, я увидел, что для первого отчета был только вызов GET, но для второго отчета были оба вызова GET и PATCH.
Мое подозрение в том, что в этом цикле async переменная thisReport
перезаписывается, когда возвращается второй отчет GET, а затем он обновляет второй отчет. Первый отчет не получил возможности обновиться.
Мой вопрос: как мне переписать код, чтобы все отчеты в списке могли обновляться. Извините за вопрос о новичке. Все советы приветствуются!
for (var i = 0; i < $scope.listOfReports.length; i++) {
var reportId = $scope.listOfReports[i].Id;
if (reportId > 0) {
var thisReport = reportSvc.query({ key: reportId });
thisReport.$promise.then(function (data) {
thisReport.name = newValue;
thisReport.$update({ key: reportId }).then(function () {
});
});
}}
После дополнительных исследований я узнал, что это замыкание внутри шаблона цикла, и я исправил это, создав функцию для логики, которая изначально была внутри цикла. новый код ниже
for (var i = 0; i < $scope.listOfReports.length; i++) {
var reportId = $scope.listOfReports[i].Id;
UpdateValue(reportId, ANewName);
}
function UpdateValue(reportId, newName)
{
if (reportId > 0) {
var thisReport = reportSvc.query({ key: reportId });
thisReport.$promise.then(function (data) {
thisReport.name = newName;
thisReport.$update({ key: reportId }).then(function () { });
});
}
}