Javascript-如何从Google Firebase随机抽取数据?
我希望每次刷新时都随机加载我的所有Firebase内容,但我似乎无法将我的所有Firebase数据放入字典中,以便对它们进行随机加载 我有一个全局数组,我试图将我的文件推到其中,然后遍历它们。但是Javascript认为数组是空的,因为时间已经过了Javascript-如何从Google Firebase随机抽取数据?,javascript,random,Javascript,Random,我希望每次刷新时都随机加载我的所有Firebase内容,但我似乎无法将我的所有Firebase数据放入字典中,以便对它们进行随机加载 我有一个全局数组,我试图将我的文件推到其中,然后遍历它们。但是Javascript认为数组是空的,因为时间已经过了 var randomStore = new Array; function homeSetup() { if(ref.toString() == featuredRef.toString()){ addFeaturedIma
var randomStore = new Array;
function homeSetup() {
if(ref.toString() == featuredRef.toString()){
addFeaturedImages();
}
console.log('randomStore length is ' + randomStore.length);
}
function addFeaturedImages(){
featuredRef.on("child_added", function(snapshot) {
var doc = {
// 'name': snapshot.key, //name is the id
'artist': snapshot.val().artist,
'author': snapshot.val().author,
'projectTitle': snapshot.val().projectTitle,
'text': snapshot.val().text
};
randomStore.push(doc);
console.log('randomStore length HERE is ' + randomStore.length);
});
}
考虑到代码是如何键入的,我会假设“randomStore length HERE is”日志将首先键入,但我得到以下结果:
randomStore length is 0
randomStore length HERE is 1
randomStore length HERE is 2
randomStore length HERE is 3
如果我把数据放到另一个数组中,我就可以对它进行随机排序之类的操作,但我似乎无法正确地把它放在那里 你刚才提到时间已经过了?你这是什么意思 你听说过Javascript承诺吗
这篇文章解释了非常好的承诺。请仔细阅读,因为如果您与firebase合作,您将在每日上使用承诺 你刚才提到时间已经过了?你这是什么意思 你听说过Javascript承诺吗
这篇文章解释了非常好的承诺。请仔细阅读,因为如果您与firebase合作,您将在每日上使用承诺 不要使用
featuredRef.on(“添加的子项”)
使用featuredRef.once('value')
。这将立即获得整个阵列。连接一个然后
监听器,在那里继续进行家庭设置
function homeSetup() {
var cb = function(randomStore) {
console.log('randomStore length is ' + randomStore.length);
//....
};
if(ref.toString() == featuredRef.toString()){
addFeaturedImages(cb);
} /* else if(...) {
addFooImages(cb)
}*/
}
function addFeaturedImages(cb){
featuredRef.once("value", function(snapshot) {
//TODO: transform elements of the array?
cb(snapshot.val());
});
}
代码未经测试,但我应该让您开始。而不是使用
featuredRef.on(“添加的孩子”)
使用featuredRef.once('value')
。这将立即获得整个阵列。连接一个然后
监听器,在那里继续进行家庭设置
function homeSetup() {
var cb = function(randomStore) {
console.log('randomStore length is ' + randomStore.length);
//....
};
if(ref.toString() == featuredRef.toString()){
addFeaturedImages(cb);
} /* else if(...) {
addFooImages(cb)
}*/
}
function addFeaturedImages(cb){
featuredRef.once("value", function(snapshot) {
//TODO: transform elements of the array?
cb(snapshot.val());
});
}
代码未经测试,但我应该让您开始。您不需要调用
addFeaturedImages()代码>只需保持打开状态,不添加AddFeatureDimagesiverrimum,不会有任何区别。我有这个功能,因为我有更多的组,这很好。javascript承诺是什么?我假设'ref.on'函数中的console.log将首先打印,但之后再打印。所以我假设因为它是Firebase,所以它是异步运行的,所以homeSetup中的console.log在循环设置之前执行。是的,承诺正是为此而做出的。我将用文档中的引用更新帖子。您不需要调用addFeaturedImages()代码>只需保持打开状态,不添加AddFeatureDimagesiverrimum,不会有任何区别。我有这个功能,因为我有更多的组,这很好。javascript承诺是什么?我假设'ref.on'函数中的console.log将首先打印,但之后再打印。所以我假设因为它是Firebase,所以它是异步运行的,所以homeSetup中的console.log在循环设置之前执行。是的,承诺正是为此而做出的。我将用文档中的引用更新帖子。