2015-09-25 100 views
1

获取与顺序阿贾克斯数据我不得不从API 3个不同的东西加载:与Angularjs

  • 用户
  • 消息

其实我所做的是:

var loadAll = $q.all([ 
    getUsers.all(), 
    getGroups.all(), 
    getMessages.all() 
]); 

loadAll.then(function (data) { 
    $scope.users = data[0]; 
    $scope.groups = data[1]; 
    $scope.messages = data[2]; 
}; 

它工作正常,但不幸福不管它是否按我所希望的顺序加载用户,组和消息...

我想要做的是加载用户,然后加载组,最后加载消息。

我不明白究竟是如何正确地做到这一点...

我的服务回报承诺:

getUsers.all() 
.then(function(data) { 
    $scope.users = data; 
}; 

但是,如果我做的:

getUsers.all() 
.then(function(data) { 
    $scope.users = data; 
    getGroups.all() 
    .then(function(data) { 
     // etc... 
    } 
}; 

它解决的承诺作为很快,用户已经被加载而无需等待其他用户...

我该怎么做?

+0

真的不清楚问题是什么。你需要'用户'数据来处理'groups'吗?第二个版本按照您要求的顺序请求请求 – charlietfl

+0

*“它工作正常,但不幸的是它按照我希望的顺序加载用户,组和消息......”*您的意思是'data'数组已超出订购?或者是什么。 –

+0

我需要首先加载所有用户,然后加载所有组,然后加载所有消息。使用q.all不会像那样工作...如果我有1000个用户和30个组,它将首先加载组......因为速度更快。 –

回答

0

链的承诺加载数据集顺序应该工作:

getUsers.all().then(function(data) { 
     $scope.users = data 
     return getGroups.all() 
}).then(function(data) { 
     $scope.groups = data 
     return getMessages.all() 
}).then(function(data) { 
     $scope.messages = data 
}); 

这一点,因为then返回一个承诺。

+0

感谢它按预期工作! –

+0

@AyeyeBrazo高兴地知道,帮助你了! – maioman