我正在尝试按照此处的建议使用 Angular forEach 在循环内使用 Angular http post- Angular HTTP Get on loop和 Angularjs loop trought $http.post但解决方案不适用于我的情况。 http post 总是返回关于 LifeBenefitTRAD 中最后一项的结果,但我想要循环中每一项的结果。例如如果我在 LifeBenefitTRAD 列表中有 4 个项目,我的 post 方法将执行 4 次但 w.r.t 列表中的第四个项目。 执行总是针对最后一个对象发生。请告诉我我在这里做错了什么?-
$scope.GenerateAllTradQuote = function () {
var TRADPlanDetails = {};
console.log(LifeBenefitTRAD);
//for (var i = 0; i < LifeBenefitTRAD.length; i++) {
LifeBenefitTRAD.forEach(function (trad) {
TRADPlanDetails.QuoteName = "TradQuote_" + trad.LifeBenefitValue;
TRADPlanDetails.LifeBenefitId = trad.LifeBenefitId;
TRADPlanDetails.LifeBenefitValue = trad.LifeBenefitValue;
console.log(TRADPlanDetails);
$http({
url: key_Url_GenerateTradQuote,
method: key_String_HttpPost,
// async: true,
params: TRADPlanDetails
}).then(function (result) {
$scope.TRAD_PlanDetails.TRAD_DisplayFlag = true;
if (result.data != key_String_Zero) {
$scope.TRAD_PlanDetails.TRAD_DisplayMsg = key_Confirm_Successful_Quote;
}
else {
$scope.TRAD_PlanDetails.TRAD_DisplayMsg = key_Confirm_failed_Quote;
}
});
});
// }
};
最佳答案
您正在 forEach
回调的 外部 声明 TRADPlanDetails
变量,这意味着您将相同的对象传递给 $ http
每次。如果在 $http
实际使用您的值之前有一些延迟,那么它最终将对其所有请求使用同一组值。
请尝试每次创建一个新变量和一个新对象:
LifeBenefitTRAD.forEach(function (trad) {
var planDetails = {
QuoteName: "TradQuote_" + trad.LifeBenefitValue,
LifeBenefitId: trad.LifeBenefitId,
LifeBenefitValue: trad.LifeBenefitValue
};
$http({
url: key_Url_GenerateTradQuote,
method: key_String_HttpPost,
// async: true,
params: planDetails
})
// ....
});
如果保持原始请求的顺序很重要,您可以执行以下操作,但请注意这会减慢进程,因为它实际上会等待每个请求完成后再开始下一个请求:
LifeBenefitTRAD.reduce(function (p) {
var planDetails = {
QuoteName: "TradQuote_" + trad.LifeBenefitValue,
LifeBenefitId: trad.LifeBenefitId,
LifeBenefitValue: trad.LifeBenefitValue
};
return p.then(function () {
return $http({
url: key_Url_GenerateTradQuote,
method: key_String_HttpPost,
// async: true,
params: planDetails
});
})
.then(function (result) {
// handle result for current request
});
}, $q.when());
以上需要使用$q
服务。
可能有一种方法可以用 $http
做一些低级的事情,这将允许您在前一个请求即将发出时立即发起一个新请求发送,但据我所知,它没有提供任何可以轻松促进这一点的内容。
关于javascript - 循环中的 Angular http post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28224473/