gpt4 book ai didi

javascript - 如何处理异步获取的数据?

转载 作者:行者123 更新时间:2023-11-29 10:41:04 25 4
gpt4 key购买 nike

我是 AngularJS 的新手,正在努力解决如何在页面上显示数据之前处理从服务器异步获取的数据。

我正在获取的数据是这样的:

"all_colors":[
{"color":"red","quantity":1},
{"color":"green","quantity":11},
{"color":"yellow","quantity":5}
]

最初加载页面时,我会像这样从服务器获取上述数据:

angular.module('angularDjangoRegistrationAuthApp')
.controller('DashbordCtrl', function ($scope, djangoAuth, Validate, $location) {
djangoAuth.fetch_from_server().then(function(data){
$scope.model = data;
});

我想在页面上显示两件事:

Available Colors: 3
Total Color Quantity: 17

我可以这样显示可用的颜色:

Available Colors: {{model.all_colors.length}}

问题

但是我如何循环 all_colors 并计算每个颜色的数量,以便我可以显示 Total Color Quantity

我似乎无法在获取数据后在我的 JS 文件中执行此操作,因为它是异步获取的。我想不出这样做的方法。

最佳答案

无论您如何获取数据,只需考虑您需要显示哪些数据 - 您的 ViewModel - 并在您获取数据时为它们赋值。

在这种情况下,创建一个作用域公开的属性$scope.totalColorQty,并在您收到数据时分配它的值:

djangoAuth.fetch_from_server().then(function(data){
$scope.model = data;
$scope.totalColorQty = computeColorQuantity(data.all_colors);
});

function computeColorQuantity(colorsArray){
// do whatever you need to calculate the quantity
}

然后,简单地在 UI 中显示它:

<div>Total Color Quantity: 
<span ng-show="totalColorQty === undefined">Loading...</span>
<span ng-hide="totalColorQty === undefined">{{totalColorQty}}</span>
</div>

一些附加说明:

1) 您可以在作用域上公开computeColorQuantity 并绑定(bind)到它。但是,我强烈建议不要这样做 - 因为此操作“繁重”并且将在每个摘要周期执行,从而使您的整个应用变慢。

不要这样做:

<div> Total Color Quantity: {{computeColorQuantity(model.all_colors)}}</div>

2) 如果你不需要重新计算这个值,那么你可以绑定(bind)一次以减少 $watchers 的数量:

<span ng-show="totalColorQty">{{::totalColorQty}}</span>

3) 如果您确实打算允许用户更新数据,那么我建议在每次用户发起的更改时重新计算它,例如,通过 ng-change,而不是通过 deep $观看

关于javascript - 如何处理异步获取的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29202498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com