【发布时间】:2018-03-03 18:22:47
【问题描述】:
我在页面加载时触发了 2 个异步 API 调用。我正在合计每个返回的值,然后计算它们的百分比变化。因此,我需要确保每个 API 都已成功调用,并且在计算差值之前已填充了保存总计的两个变量。
我现在所做的是使用$watchGroup 观察两个变量并在两个变量都不是null 时调用函数。这是我的控制器代码:
module Controllers {
export class MyController {
static $inject = ["$scope",'$http'];
public TotalCurrent: any;
public TotalPrevious: any;
public diffPercent:any;
constructor(
private $scope: ng.IScope,
private $http: ng.IHttpService,
) {
this.$scope.$watchGroup(['myC.TotalCurrent', 'myC.TotalPrevious'], function (newVal, oldVal, scope) {
if (newVal[0] != oldVal[0] && newVal[1] != oldVal[1] && newVal[0] != null && newVal[1] != null)
scope.myC.diffPercent = scope.myC.GetDifferencePercent(newVal[0], newVal[1]);
});
this.GetValuesFromAPI();
}
public GetValuesFromAPI() {
this.TotalCurrent = null;
this.TotalPrevious= null;
this.$http.get("url1").then((result: any) => {
if (result.value.length > 0) {
var TempCurrentTotal = 0;
for (var i = 0; i < result.value.length; i++) {
TempCurrentTotal += result.value[i].Val;
}
this.TotalCurrent = TempCurrentTotal;
}
});
this.$http.get("url2").then((result: any) => {
if (result.value.length > 0) {
var TempPreviousTotal = 0;
for (var i = 0; i < result.value.length; i++) {
TempPreviousTotal += result.value[i].Val;
}
this.TotalPrevious= TempPreviousTotal;
}
})
}
public GetDifferencePercent(current:any, last:any){
var percentage = ((Math.abs(current - last) / last) * 100).toFixed(2);
return percentage;
}
}
}
目前这工作正常。但是,我想知道是否有任何方法可以实现这一点,而不必担心与使用 $watchGroup 相关的性能问题,因为未来 API 调用的数量可能会增加,而且我的页面在 @987654325 上还有其他几个变量@。我考虑使用.then() 链接API 调用,但每个API 的响应时间都非常长,链接它们也会减慢页面速度。有什么建议吗?
【问题讨论】:
标签: javascript angularjs typescript asynchronous