Javascript 返回函数外部的对象
我试图返回一个函数之外的对象。我使用Angular JS promise来记录加载后的Javascript 返回函数外部的对象,javascript,angularjs,firebase,promise,angular-promise,Javascript,Angularjs,Firebase,Promise,Angular Promise,我试图返回一个函数之外的对象。我使用Angular JS promise来记录加载后的可用Providers,这将正确地记录到我的控制台 function getServiceProviders(serviceId) { var serviceProviders = ref.child('services').child(serviceId).child('providers'); var providers = ref.child('providers'); servicePro
可用Providers
,这将正确地记录到我的控制台
function getServiceProviders(serviceId) {
var serviceProviders = ref.child('services').child(serviceId).child('providers');
var providers = ref.child('providers');
serviceProviders.on('value', function(snapshot) { // on services.serviceId.providers
var availableProviders = {}; // create empty availableProviders array
snapshot.forEach(function(childSnapshot) { // for each provider in services.serviceId.providers
var key = childSnapshot.key(); // grab each provider's key
providers.on('value', function(snap) { // on providers
if (snap.hasChild(key)) { // if providers has a child that matches the var key above
var item = snap.child(key); // store that child in a var called item
availableProviders[item.key()] = item.val(); // add item to availableProviders array
}
});
}); // rinse and repeat
var defer = $q.defer();
defer.promise
.then(function() {
console.log(availableProviders);
})
defer.resolve();
});
return availableProviders;
}
我想让getServiceProviders()
函数返回这些availableProviders,但是我得到了这个错误,因为该函数之外没有定义availableProviders'
ReferenceError: availableProviders is not defined
这有什么办法吗。感谢您的帮助。提前谢谢 与JavaScript中的闭包相关的问题,我认为您需要移动var availableProviders={}代码>外部服务提供者。在('value',函数(快照){
函数将修复您的问题
代码
function getServiceProviders(serviceId) {
var serviceProviders = ref.child('services').child(serviceId).child('providers');
var providers = ref.child('providers');
var availableProviders = {}; // <==made it global
serviceProviders.on('value', function(snapshot) { // on services.serviceId.providers
snapshot.forEach(function(childSnapshot) { // for each provider in services.serviceId.providers
var key = childSnapshot.key(); // grab each provider's key
providers.on('value', function(snap) { // on providers
if (snap.hasChild(key)) { // if providers has a child that matches the var key above
var item = snap.child(key); // store that child in a var called item
availableProviders[item.key()] = item.val(); // add item to availableProviders array
}
});
}); // rinse and repeat
var defer = $q.defer();
defer.promise
.then(function() {
console.log(availableProviders);
})
defer.resolve();
});
return availableProviders;
}
函数getServiceProviders(serviceId){
var serviceProviders=ref.child('services').child(serviceId).child('providers');
var providers=ref.child(“providers”);
var availableProviders={};//Aha!所以这就像在全球范围内定义availableProviders
一样简单?耶..很简单..延迟不应该在那里。因为它什么都不做感谢您的帮助。@realph很高兴听到它帮助了您。别忘了接受答案..谢谢。