gpt4 book ai didi

Firebase on() 不返回任何内容

转载 作者:行者123 更新时间:2023-12-02 18:59:30 25 4
gpt4 key购买 nike

我有这段代码使用 on() 从 Firebase 获取数据,在 on() 内部我创建了一个对象,我想将其发送到函数之外以供将来使用 - 使用 return,但它似乎不返回任何内容。所以问题是我怎样才能做到正确?

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 */ );

关于Firebase on() 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com