如何加载用户列表并并行呈现它们
How to load a list of users and render them in parallel?
在angularjs应用程序中,我有一个用户ID列表,并希望并行检索它们,然后将它们显示在页面上,但我不知道该怎么做。
我现在的代码看起来像:
<ul ng-controller="MyCtrl">
<li ng-repeat="user in users">User id: {{user.id}}, name: {{user.name}}</li>
</ul>
app.controller("MyCtrl", function($scope, $http) {
$scope.userIds = [1,2,3,4, ... to 100];
$scope.users = [];
$scope.userIds.each(function(id) {
$http.get("/users/"+id)
.success(function(data) {
// data is a json, like:
// {
// id: ???,
// name: ???
// }
//
$scope.users.append(data);
});
})
})
您可以看到用户被逐个检索,并且顺序可能会受到干扰。如果在 Angular 中还有更好的方法吗?
你可以通过使用一系列承诺来做到这一点:
var promises = [];
$scope.userIds = [111,222,333,444, ... to 100];
$scope.users = [];
for(var i = 0 ; i < $scope.userIds.length ; i++){
var deffered = $q.defer();
var userId = $scope.userIds[i];
$http.get("/users/"+userId).
success(function(data){
$scope.users.append(data);
deffered.resolve(data);
}).
error(function(error){
deffered.reject();
});
promises.push(deffered.promise);
}
return $q.all(promises).then(function(){
//here will be code, that should run when all users loaded
});
我不知道
angularjs,但我认为你可以使用async.js.例如:
$scope.userIds = [111,222,333,444];
var tasks = {};
$scope.userIds.each(function(id) {
tasks[id.toString()] = function(callback) {
$http.get("/users/"+id).success(function(data) {
//you can update Html at here
callback(null, data);
});
};
});
async.parallel(tasks, function(err, users) {
//users: { '111': { id: ???, name: ??? }, '222': { id: ???, name: ??? },...}
});
相关文章:
- 要求输入在数据列表中
- 从javascript创建一个列表
- 如何使用jQuery选择下拉列表的值
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- Javascript按钮下拉列表
- 如何使用json将对象列表从java转换为javascript
- 区分JSON中的矩阵和列表列表
- jQuery表单添加不适用于下拉列表
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 接受不在列表中的值-引导组合框
- 禁用jQuery中的下拉列表
- Javascript/jQuery中的并行Ajax调用
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 如何在javascript中迭代数字列表
- 如何在按钮中显示下拉列表中选定的元素
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- 如何加载用户列表并并行呈现它们
- 在Javascript中创建并行的复选框列表