Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-如何从Google Firebase随机抽取数据?_Javascript_Random - Fatal编程技术网

Javascript-如何从Google Firebase随机抽取数据?

Javascript-如何从Google Firebase随机抽取数据?,javascript,random,Javascript,Random,我希望每次刷新时都随机加载我的所有Firebase内容,但我似乎无法将我的所有Firebase数据放入字典中,以便对它们进行随机加载 我有一个全局数组,我试图将我的文件推到其中,然后遍历它们。但是Javascript认为数组是空的,因为时间已经过了 var randomStore = new Array; function homeSetup() { if(ref.toString() == featuredRef.toString()){ addFeaturedIma

我希望每次刷新时都随机加载我的所有Firebase内容,但我似乎无法将我的所有Firebase数据放入字典中,以便对它们进行随机加载

我有一个全局数组,我试图将我的文件推到其中,然后遍历它们。但是Javascript认为数组是空的,因为时间已经过了

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在循环设置之前执行。是的,承诺正是为此而做出的。我将用文档中的引用更新帖子。