Angularjs 解析中的角度链接请求

Angularjs 解析中的角度链接请求,angularjs,angular-ui-router,firebase,angularfire,Angularjs,Angular Ui Router,Firebase,Angularfire,我有一个页面显示用户和用户活动的位置。根据flat structure上的Firebase文档,我将用户和位置存储在两个不同的节点中。我希望ui路由器在加载页面之前解析用户和位置数组 下面是我正在使用的代码,但我不知道如何为location变量编写return语句,以便它等待检索所有位置。(据我所知,angularfire中没有任何选项可以通过一次呼叫检索所有位置,我认为这种解决方案非常受欢迎。) 你必须用$q兑现自己的承诺: function ($q, firebase, $firebaseO

我有一个页面显示用户和用户活动的位置。根据flat structure上的Firebase文档,我将用户和位置存储在两个不同的节点中。我希望ui路由器在加载页面之前解析用户和位置数组

下面是我正在使用的代码,但我不知道如何为location变量编写return语句,以便它等待检索所有位置。(据我所知,angularfire中没有任何选项可以通过一次呼叫检索所有位置,我认为这种解决方案非常受欢迎。)


你必须用$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 $q.all(promiseArray)

你必须用$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 $q.all(promiseArray)

这正是我尝试过的,但由于某些原因,它不起作用。它在解析块中解析,但在控制器中未定义$q、 all(console.log())返回多个位置这应该可以工作。。。在您的控制器中,您应该插入位置$q、 all(console.log())没有真正意义,我不确定我是否理解。这太令人尴尬了。我把括号放错地方了。谢谢你的回答!发生在我们中最好的人身上。这正是我尝试过的,但由于某些原因它不起作用。它在解析块中解析,但在控制器中未定义$q、 all(console.log())返回多个位置这应该可以工作。。。在您的控制器中,您应该插入位置$q、 all(console.log())没有真正意义,我不确定我是否理解。这太令人尴尬了。我把括号放错地方了。谢谢你的回答!发生在我们最好的人身上。