[英]How to loop through an array of 100 objects with different properties and retrieve 1 property value from each?
[英]async programming - how to loop through an array of objects and change a property to each object with data fetched from an api?
所以我有一个类似于这样的对象数组:
[ { id: 123, info: 'text', number: 0 }, ... ]
我有一个 API,它获取对象的 ID 并返回与之关联的数字。 在使用 JavaScript 的前端应用程序上,我想遍历数组中的每个对象,并使用来自此 API 的数据填充该数字属性。
我正在使用 AngularJS,这是我编写的用于获取与每个对象关联的数字的函数:
$scope.getNumber = function(id) {
$http.get('/api/getnumber/' + id)
.success(function(data) {
console.log(data.goings);
return data.number;
});
}
这个功能有效。 我的问题是我不知道如何更新数组中每个对象的 number 属性。 我试过循环它,但这不起作用,因为循环在.get()
完成获取数据之前执行。 我也试过在 html 中有以下代码:
<div ng-repeat="obj in data">
{{ getNumber(obj.id) || 0 }}
</div>
但这会创建一个无限循环,使我的浏览器崩溃。 我尝试进行了一些搜索,但找不到可比较的案例。 我怎样才能做到这一点?
$http.get(..).success(..)
返回一个promise,因此不能这样使用。 也许在控制器加载时加载所有数字并将其附加到数据?
如前所述, success()
函数只是返回另一个promise,它本身并不是您想要的值。 像在成功函数中一样返回一个值,仅作为在链接它们时将结果传递给另一个Promise 的一种方式才有用。
如果这些值在用户与页面交互时可能会发生变化,最好的选择是拥有一个持续显示的范围变量(您的数组正在使用ng-repeat
工作迭代),并由$http
承诺更新。
如果您只希望每次加载页面时它都是一件事,您可以使用解析预加载它们(对于使用 UI-router 的解析,请看这里)。 Resolves 允许您在页面加载之前进行 Promise 调用,并且只有在 Promise 全部解决后才开始加载实际页面。
您可能需要批量检索您需要的数字,但如果没有,您可以使用$q.all()
将单个调用转换为组解析,这允许您提供一组 promise 并返回一个他们的结果数组。
当然,如果你想提前加载它们,然后在页面的生命周期中修改它们,你可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.