我正在使用 AngularJS 执行 API 请求,该请求接收针对特定市场的当前实时促销优惠。市场由 ADI 组织。
并非所有市场都会在任何特定时刻实时提供多个报价,因此我很难区分。有时会有 0 个、1 个甚至 2 个,但这是一个市场可以同时存在的最多数量。如果您在下面看到我的代码,您可以注意到我的 API 调用,然后根据我的响应,我进入并获取更多属性,例如到期日期、事件状态等。
因此,对于有 1 个报价的市场,它会给我一个错误,因为它会尝试循环并找到 [1]。您建议如何清理此功能,以便在市场没有多个实时报价时我不会出现错误。
您还会注意到属性is_primary,我想将其更改为 bool 值。因此,如果答案等于 1,则将答案设为 true,以便我可以将其显示在前端。如果答案等于 0,则为假。
$scope.offersNow = function () {
if (offer.campaign_state === 'live') {
var config = { method: 'get', url : $scope.config.url + '/offers/' + $scope.offer.market_adi};
console.log($scope.offer.market_adi);
$http(config).success(function(response, status){
if(status === 200) {
if (response.length > 0) {
response[1].Expiration_Date = moment.utc(response[1].Expiration_Date).format('MM-DD-YYYY');
response[1].isPrimary = response[1].is_primary;
console.log(response[1]);
console.log(response[1].isPrimary);
console.log(response[1].Expiration_Date);
}
console.log(response.length);
response[0].Expiration_Date = moment.utc(response[0].Expiration_Date).format('MM-DD-YYYY');
response[0].isPrimary = response[0].is_primary;
console.log(response[0]);
console.log(response[0].isPrimary);
console.log(response[0].Expiration_Date);
}
else{
alert("Is Not Working");
}
});
}
};
您建议此时做什么可以使我的代码更加高效并且可以在许多其他情况下工作?
最佳答案
您可以使用Array.map函数循环遍历响应数组并添加任何其他属性。您也不需要使用map函数检查长度是否大于0。
$scope.offersNow = function () {
if (offer.campaign_state === 'live') {
var config = { method: 'get', url : $scope.config.url + '/offers/' + $scope.offer.market_adi};
console.log($scope.offer.market_adi);
$http(config).success(function(response, status){
if(status === 200) {
response.map(function(offer, index, arr) {
offer.Expiration_Date = moment.utc(offer.Expiration_Date).format('MM-DD-YYYY');
offer.isPrimary = offer.is_primary;
console.log(offer);
console.log(offer.isPrimary);
console.log(offer.Expiration_Date);
return offer;
}
}
else{
alert("Is Not Working");
}
});
}
};
关于javascript - API 请求函数清理 AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773072/