我正在调用两个不同的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;
}]);
答案 0 :(得分:2)
您的return userBettedEvent
行上的数组不可见是因为回调在JavaScript中的运行方式。
回调,这是看起来像这样的事情,
doSomethingCool("stuff", function() {...});
通常在他们完成的功能完成后运行一次。当您的浏览器等待doSomethingCool
完成时,它会继续执行后续代码。
换句话说,如果你有这样的代码:
doSomethingCool("stuff", function() {
console.log("hello");
});
console.log("goodbye");
你可能会看到这个输出:
goodbye
hello
要解决您的问题,您需要了解回调在JavaScript中的工作方式。