0
AngularJsでアプリケーションをコーディングします。ユーザーが参加したすべてのグループの一覧を取得したい
私は次のように書いた:
controller('DashCtrl', function($scope, $q, $localStorage, AuthService, DatabaseService, GroupService) {
console.log("*** DashCtrl ***");
var user = AuthService.currentUser;
$scope.user = user;
var uid = $scope.user.auth.uid;
$scope.joinedGroups = [];
var tmpGroups = [];
var addGroupDetailsPromises = [];
GroupService.getUserJoinedGroupsArray($scope.user.auth.uid)
.then(function(groups) {
for (var i = 0; i < groups.length; i++) {
var tmpGroup = {};
tmpGroup.id = groups[i];
addGroupDetailsPromises.push(addGroupDetails(tmpGroup));
tmpGroups.push(tmpGroup);
}
})
.catch(function(error) {
console.log('Error retrieving groups: ', error);
});
// Once all details have been added to groups, sort groups
$q.all(addGroupDetailsPromises).then(function() {
console.log(tmpGroups.length);
tmpGroups.sort(function(a, b) {
console.log('a: ', a.details.timestamp);
console.log('b: ', b.details.timestamp);
return a.details.timestamp - b.details.timestamp;
});
console.log(tmpGroups);
$scope.joinedGroups = tmpGroups;
}).catch(function(error) { console.log(error); });
function addGroupDetails(tmpGroup) {
var promise = new Promise(function(resolve, reject) {
GroupService.getGroupDetailsObj(tmpGroup.id).then(function(details) {
tmpGroup.details = details;
tmpGroup.display = {};
var eventDate = new Date(details.timestamp);
var today = new Date();
if (eventDate >= today) {
tmpGroup.display.day = eventDate.getDate();
tmpGroup.display.month = monthNames[eventDate.getMonth()].substr(0, 3);
tmpGroup.display.time = eventDate.getHours() + ":" + eventDate.getMinutes();
}
resolve();
});
});
return promise;
};
var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
})
グループ(tmpGroups)の私の配列をソートれることは決してありません。配列の長さは、私のconsole.log(tmpGroups.length)を出力するものに基づいて0に等しくなります...それが決してソートされない理由です。
しかし、すべての約束が解決されるのを待つ$ q.allを使用していたので、私の配列はすべての情報で満たされているはずなので、その結果は分かりません。
提案がありますか? GroupService.getUserJoinedGroupsArrayは、非同期呼び出しであるためである
おかげ
私は確かに働いていました。ありがとう! –
ねえ、私は似たような問題を抱えています....ほとんど同じ、非同期の問題に見えますが、私の並べ替えがコントローラに返される前に私の結果を事前に配置する必要があるのか分からない。あなたは見てみることができますか? https://stackoverflow.com/questions/46494215/sorting-q-all-responses-not-working – rolinger