Angular 链接请求解决
Angular chaining requests in resolve
我有一个页面显示用户和用户活跃的位置。根据关于平面结构的 Firebase 文档,我将用户和位置存储在两个不同的节点中。我希望 ui-router 在加载页面之前解析用户和位置数组。
下面是我正在使用的代码,但我不知道如何为位置变量编写 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);
})
})
}
}
你必须使用 $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;
});
}
注意 显然你不再需要 locations 变量或 .then 了。你 return 可能只是:
return $q.all(promiseArray)
我有一个页面显示用户和用户活跃的位置。根据关于平面结构的 Firebase 文档,我将用户和位置存储在两个不同的节点中。我希望 ui-router 在加载页面之前解析用户和位置数组。
下面是我正在使用的代码,但我不知道如何为位置变量编写 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);
})
})
}
}
你必须使用 $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;
});
}
注意 显然你不再需要 locations 变量或 .then 了。你 return 可能只是:
return $q.all(promiseArray)