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