我有这个函数是javascript,我希望从我存储在我的firebase数据库中的数据构造一个数组。很明显,正在正确创建数组(通过使用console.log语句),但是我无法将数组放在函数之外。到目前为止,这就是我所拥有的:
// my function
function foo(){
firebase.database().ref("data").once('value').then(function(snapshot){
var list = snapshot.val();
var newlist = [];
for(var item in list){
newlist.push(
{axis:"x-axis", value:list[item].info, definition: list[item].def},
{axis:"y-axis", value:list[item].info, definition: list[item].def},
{axis:"z-axis", value:list[item].info, definition: list[item].def},
);
}
return newlist;
})
}
// my creation
var fooList = foo();
// my test
setTimeout(function(){
console.log(fooList); // returns undefined...
},5000);
每当我运行此函数时,我总会得到一个未定义的元素。 我真的很感激你的帮助!
答案 0 :(得分:0)
您可以从Promise
函数返回foo
并使用await
在其他地方获取结果,或者您可以在返回的承诺上使用then
这是一个更好的解决方案
结帐代码
function foo(){
return new Promise(function(resolve , reject){
firebase.database().ref("data").once('value').then(function(snapshot)
{
var list = snapshot.val();
var newlist = [];
for(var item in list){
newlist.push(
{axis:"x-axis", value:list[item].info, definition: list[item].def},
{axis:"y-axis", value:list[item].info, definition: list[item].def},
{axis:"z-axis", value:list[item].info, definition: list[item].def},
);
}
resolve(newlist);
});
})
}
//or without await
foo().then(function(list){
console.log('using then , ' , list);
})
var fooList = await foo();
// my test
setTimeout(function(){
console.log('in setTimeout' , fooList);
},5000);
console.log('without setTimeout' , fooList);