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)