2015-09-25 64 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