我有以下代码循环遍历报告列表,更改每个人的姓名并进行更新。如果列表中只有一个报告,它可以正常工作,但如果有2个报告,那么只有第二个报告会更新。
当我查看网络选项卡时,我看到第一个报告中只有一个GET调用,但是对于第二个报告,有GET和PATCH调用。
我怀疑在这个异步循环中,当第二个报告的GET返回时,变量thisReport
会被覆盖,然后继续更新第二个报告。第一份报告没有机会获得更新。
我的问题是我应该如何重写代码,以便列表中的所有报告都可以更新。抱歉新手问题。所有建议都表示赞赏!
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 () {
});
});
}}
答案 0 :(得分:1)
经过更多的研究,我知道这是一个封闭内部循环模式,我通过为最初在循环内部的逻辑创建一个函数来解决这个问题。下面的新代码
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 () { });
});
}
}