没有从工厂返回数据数组

时间:2014-10-09 04:55:49

标签: angularjs firebase

我正在调用两个不同的firebase位置来获取数据,一旦数据被加载,我就创建了一个对象。然后将这些对象推入一个数组并返回数组。

但我没有得到从工厂返回的数组

myApp.factory('MybetFactory', ['$firebase', function ($firebase) {
  var factory = {};
  factory.getUsersBetsProfile = function (userId, callback) {

    //1. first call to firebase data
    var firebaseUsersBetsProfileRef = new Firebase("https://x.firebaseio.com/profile").child(userId);
    var userBettedEvent = [];
    var userBetProfile = $firebase(firebaseUsersBetsProfileRef).$asObject();
    //2. once object is loaded call second location and load the data
    userBetProfile.$loaded().then(function () {

      angular.forEach(userBetProfile, function (eachUserBetProfile) {
        if (eachUserBetProfile !== null && eachUserBetProfile.hasOwnProperty('id')) {

          var firebaseEventsResultsRef = new Firebase("https://x.firebaseio.com/result/+id");

          var resultsForProfileBets = $firebase(firebaseEventsResultsRef).$asObject();
          //3. once the data is loaded, push it into object created above
          resultsForProfileBets.$loaded().then(function () {
            console.log('Results for profile bets loaded', resultsForProfileBets);
            eachUserBetProfile.results = resultsForProfileBets;
            //4. push same object in array
            userBettedEvent.push(eachUserBetProfile);
          });
        }
      });
    });
    //Issue: this array is not been return in scope
    return userBettedEvent;
  };

  return factory;
}]);

1 个答案:

答案 0 :(得分:2)

您的return userBettedEvent行上的数组不可见是因为回调在JavaScript中的运行方式。

回调,这是看起来像这样的事情,

doSomethingCool("stuff", function() {...});

通常在他们完成的功能完成后运行一次。当您的浏览器等待doSomethingCool完成时,它会继续执行后续代码。

换句话说,如果你有这样的代码:

doSomethingCool("stuff", function() {
    console.log("hello");
});
console.log("goodbye");

你可能会看到这个输出:

goodbye
hello

要解决您的问题,您需要了解回调在JavaScript中的工作方式。