Angular chaining请求得到解决

时间:2016-01-27 17:20:33

标签: angularjs angular-ui-router firebase angularfire

我有一个显示用户和用户活动位置的页面。根据平面结构的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);
          })
        })
      }
    }

1 个答案:

答案 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)