Javascript 如何在将变量传递给函数之前将所有值从ChildSnapshot中获取到变量中

Javascript 如何在将变量传递给函数之前将所有值从ChildSnapshot中获取到变量中,javascript,firebase,callback,promise,firebase-realtime-database,Javascript,Firebase,Callback,Promise,Firebase Realtime Database,我想把childsnapshot的所有值都放到一个变量中,然后把这些值传递给一个函数,这个函数应该用这些值创建一个图, 我无法收集所有值并传递,我尝试过回调,但无法正确实现 下面是代码片段:: dbref .once("value") .then ( function(snapshot) {

我想把childsnapshot的所有值都放到一个变量中,然后把这些值传递给一个函数,这个函数应该用这些值创建一个图, 我无法收集所有值并传递,我尝试过回调,但无法正确实现

下面是代码片段::

dbref
        .once("value")
            .then
                (
                    function(snapshot)
                        {
                        snapshot.forEach
                            (
                            function(childsnapshot)
                            {
                             var data = childsnapshot.val();

                             var Nameval=data.Name;

                             if(Nameval==namekey)
                             {
                             console.log("Success");

                             Ikey=childsnapshot.key();

var dxRef=new Firebase("https://apraisalstaging.firebaseio.com/EmployeeDB/EApraise/"+Ikey); 

                          dxRef
                            .once("value")
                                .then
                                (
                                    function(snapshot)
                                        {

                                            snapshot.forEach
                                            (

                                                function(childsnapshot)
                                                {

                                                    var data=childsnapshot.val();
                                                    var Rtdate=data.Dateval;
                                                    console.log(Rtdate);


                                                }   

这里人多了,弗兰克。。。有时候。我对你的代码做了一些调整,以帮助我解决你的问题,我强烈建议你研究一下承诺是如何起作用的。没有太多的东西,我能想到的是:

dbref
    .once("value")
    .then(function (snapshot) {
        var promises = [];
        snapshot.forEach(function (childsnapshot) {
            var data = childsnapshot.val();
            var Nameval = data.Name;

            if (Nameval == namekey) {
                console.log("Success");

                Ikey = childsnapshot.key();

                var dxRef = new Firebase("https://apraisalstaging.firebaseio.com/EmployeeDB/EApraise/" + Ikey);

                promises.push(dxRef
                    .once("value")
                    .then(function (snapshot) {
                        var returnData = [];
                        snapshot.forEach(function (childsnapshot) {
                            var data = childsnapshot.val();
                            var Rtdate = data.Dateval;
                            console.log(Rtdate);
                            returnData.push(Rtdate);
                        });
                        return returnData;
                    }));
            }
        });
        return Promise.all(promises);
    }).then(function(result){
        console.log(result);
    });

这将创建一个承诺数组,一旦所有子请求都得到解决,这些承诺将得到解决,然后您可以在底部看到console.log(result)。这就是你调用函数的地方。

@Frank van Puffelen请看一看你的代码得到了以下错误未捕获(承诺中)引用错误:$q未在testcallback.html:65(匿名)@testcallback.html:65 testcallback.html:58 10/2/2017 testcallback.html:59未捕获(承诺中)TypeError:data.push不是一个函数。你可以使用普通的javascriptHey吗?我更新为使用Vanaly js,还修复了一个小错误。