我有一个显示用户和用户活动位置的页面。根据平面结构的Firebase文档,我将用户和位置存储在两个不同的点头中。我希望ui-router在加载页面之前解析用户和位置数组。
下面是我正在使用的代码,但我无法弄清楚如何为location变量编写return语句,以便它等待检索所有位置。 (据我所知,angularfire中没有选项可以通过一次调用来检索所有位置,并认为解决方案非常受欢迎。)
resolve: {
user: function(firebase, $firebaseObject, $stateParams){
var user = $firebaseObject(firebase.user.child($stateParams.id));
return user.$loaded().then(function(){
return user;
})
},
locations: function(firebase, $firebaseObject, user) {
var locations = [];
angular.forEach(user.locations, function (value, location) {
var retrievedLocation = $firebaseObject(firebase.location.child(location));
retrievedLocation.$loaded().then(function(){
locations.push(retrievedLocation);
})
})
}
}
答案 0 :(得分:0)
你必须用$ q推出自己的承诺:
function ($q, firebase, $firebaseObject, user) {
var promiseArray = [];
angular.forEach(user.locations, function (value, location) {
var retrievedLocation = $firebaseObject(firebase.location.child(location));
promiseArray.push(retrievedLocation.$loaded().then(function(){
return retrievedLocation;
});
})
return $q.all(promiseArray).then(function(data){
var locations = data;
return locations;
});
}
注意显然您根本不需要位置变量或.then。你可以回来:
return $q.all(promiseArray)