Firebase on()不返回任何内容
我有一段代码,使用on()从Firebase获取数据,在on()中我创建了一个对象,我想把它发送到函数外供将来使用——使用return,但它似乎什么都不返回。 所以问题是我怎样才能使它正确Firebase on()不返回任何内容,firebase,Firebase,我有一段代码,使用on()从Firebase获取数据,在on()中我创建了一个对象,我想把它发送到函数外供将来使用——使用return,但它似乎什么都不返回。 所以问题是我怎样才能使它正确 postsRef.on('value', function(snapshot) { if (snapshot.val() === null) { var allPosts = false, numberOfPosts = 0; } else { var allPosts = snapshot
postsRef.on('value', function(snapshot) {
if (snapshot.val() === null) {
var allPosts = false,
numberOfPosts = 0;
}
else {
var allPosts = snapshot.val(),
numberOfPosts = Object.size(allPosts);
}
var postsData = {
content: allPosts,
count: numberOfPosts
};
return postsData;
});
回调函数是异步调用的(将来某个时候)。因此,在调用它时,
postsRef.on(…)
已经返回,之后的任何代码都将立即运行
例如,这可能很诱人,但不起作用:
var postsData;
postsRef.on('value', function(snapshot) {
postsData = snapshot.val();
});
console.log(postsData); // postsData hasn't been set yet!
所以有几种不同的方法来解决这个问题。最佳答案取决于偏好和代码结构:
将访问postsData的逻辑移动到回调中
postsRef.on('value', function(snapshot) {
postsData = snapshot.val();
console.log(postsData);
});
调用回调时调用另一个函数
function logResults(postsData) {
console.log(postsData);
}
postsRef.on('value', function(snapshot) {
logResults(snapshot.val());
});
触发事件
function Observable() {
this.listeners = [];
}
Observable.prototype = {
monitorValue: function( postsRef ) {
var self = this;
postsRef.on('value', function(snapshot) {
self._notifyListeners(postsRef);
});
},
listen: function( callback ) {
this.listeners.push(callback);
},
_notifyListeners: function(data) {
this.listeners.forEach(function(cb) {
cb(data);
}
}
};
function logEvent( data ) {
console.log(data);
}
var observable = new Observable();
observable.listen( logEvent );
observable.monitorValue( /* postsRef goes here */ );
谢谢你的回答,我还是有点困惑。当我在回调中移动逻辑时,它会被触发很多次——在每次更改ref期间,所以我现在使用once()。对我来说,最好的方法是在返回对象时从中获取数据,也许这里提到过这样的事情:在jQuery中使用promise()函数,但无论如何还是要感谢:)如果您现在只想得到数据值的通知,将来数据值更改时再也不想收到通知,那么once()就是最好的选择!在异步世界中不存在“返回对象”这样的东西,因为无法知道相对于后面的代码,回调何时实际被调用。承诺也是一个很好的选择,如果它们对你更有意义的话。