【问题标题】:why is my variable elecfirebase always equal to [ ]? [duplicate]为什么我的变量 elecfirebase 总是等于 [ ]? [复制]
【发布时间】:2020-01-29 03:08:39
【问题描述】:

我有一个请求,之后我的变量(elecfirebase)总是[]

function a(){
let elecfirebase=[]
    firebase
        .database()
        .ref("/fournisseurs")
        .child(0)
        .child("data")
        .on("value", data => {
          elecfirebase=data.val();    
      });
console.log("elecfirebase ",elecfirebase)
}

【问题讨论】:

  • data.val() 返回的是什么?有什么事吗?
  • 你能把console.log("elecfirebase ",elecfirebase)移到.on("value", data => { elecfirebase=data.val(); console.log("elecfirebase ",elecfirebase) });里面吗
  • 它从 firebase 返回一个数组!
  • 当我将console.log("elecfirebase ",elecfirebase) }); 移动到里面时,我有很好的输出
  • 是的,但是你有 console.log 外面,并且 firebase 函数是异步的,它会在获取数据后触发

标签: javascript firebase firebase-realtime-database


【解决方案1】:

console.log("elecfirebase ",elecfirebase) 上面的 console.log 总是会给你 [] 因为 firebase 函数是异步函数

获取数据后可以调用函数如下

function a(){
    let elecfirebase=[]
    firebase
        .database()
        .ref("/fournisseurs")
        .child(0)
        .child("data")
        .on("value", data => {
          elecfirebase=data.val(); 
          onData(elecfirebase);
      });

}
function onData(elecfirebase){
     console.log(elecfirebase)
}

如果您也想在其他地方使用此值,请使用回调或承诺。这是回调的例子

function foo(){
...
...
//calling function with callback
a(function(elecfirebase){

})
...
...
}

function a(callback){
    let elecfirebase=[]
    firebase
        .database()
        .ref("/fournisseurs")
        .child(0)
        .child("data")
        .on("value", data => {
          elecfirebase=data.val(); 
          callback(elecfirebase);
      });

}

希望对你有帮助

【讨论】:

  • 谢谢这个答案!
  • 但是在这里,我想从 a() 返回 elecfirebase;我把 console.log() 用来验证输出
  • 那你需要使用回调,因为这是异步方法
  • 我添加了回调示例
  • 所以 value 会得到 a(...) 将返回的数组
猜你喜欢
  • 2021-03-24
  • 2020-09-23
  • 2023-03-29
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
相关资源
最近更新 更多