【问题标题】:How to retrieve a value from firebase within a table?如何从表中的 firebase 检索值?
【发布时间】:2023-02-26 21:10:59
【问题描述】:

让我首先展示我所拥有的以及到目前为止我尝试过的东西:

var database = firebase.database().ref().child('Datah/Real');
    database.orderByChild("result").equalTo("RUNNING").once('value', function(snapshot){
        var content = '';
        snapshot.forEach(function(data){
          var key = data.ref.getKey();
          var time = data.val().time;
          var quote = data.val().quote;
          var type = data.val().type;

          var date = new Date(time * 1000);

          var current = 0;
          firebase.database().ref().child("Datah/Prices/" + quote).once("value", function(snapshot) {
            console.log(snapshot.key+" : "+snapshot.child("price").val());
            current = snapshot.child("price").val();
          });

          content += '<tr>';
          content += '<td>' + date.toLocaleString() + '</td>';
          content += '<td>' + quote + '</td>';
          content += '<td>' + type + '</td>';
          content += '<td>' + current + '</td>';
          content += '</tr>';
        });

        });
        $('#ex-table').append(content);
        var tbody = $('table tbody');
        tbody.html($('tr',tbody).get().reverse());
       });

我在 firebase 中有数据,我正在从第一个 ref 中检索这些数据:数据/真实,并且此数据包含以下字符串值引用,对于我要检索的每个数据,我想使用引用从另一个 ref 检索相关数据:数据/价格.在该参考中,我只想从等于的孩子那里检索数据引用, 所以:数据/价格/报价.当我得到这个值时,我想用它填充我的表。

我设法获得了第一个数据并且它正确地填充了我的表,挑战在于应该返回的第二个快照当前的,因为它仍然返回0作为预定义,但是在控制台上:console.log(snapshot.key+" : "+snapshot.child("price").val()); 它表明它实际上正在检索值,但为什么在我的桌子上当前的总是0并不是0在控制台上?

【问题讨论】:

    标签: javascript firebase


    【解决方案1】:

    这是因为代码是异步运行的

    此代码正确获取当前价格,但仅在其余代码运行之后。

    firebase.database()
    .ref("Datah/Prices/" + quote)
    .once("value", 
          snapshot=>{
              // This code is asynchronous, i.e. only runs after this snapshot has been returned, 
              // which will be long after the "content =" lines in your code
                  console.log(snapshot.key+" : "+snapshot.child("price").val());
              current = snapshot.child("price").val();
    
    
              // Therefore try putting all the `content += ` code in here.
              content += '<tr>';
              content += '<td>' + date.toLocaleString() + '</td>';
              content += '<td>' + quote + '</td>';
              content += '<td>' + type + '</td>';
              content += '<td>' + current + '</td>';
              content += '</tr>';
              $('#ex-table').append(content);
          }
    );
    

    要解决这个问题,如何将所有表更新移动到“current = snapshot...”之后,这意味着它必须在异步代码块内部,如我上面所示。

    您可能仍然需要稍微修改代码以使 jQuery 更新发生——我不熟悉 jQuery,所以我可能没有移动确切地块内的正确代码。

    【讨论】:

    • 嗨,抱歉,我忘了指出我也尝试过(将表格内容放入该方法中)并且表格完全是空的,
    • 您是否也确保将 `$('#ex-table').append(content);` 放入该方法中?如我的代码所示?因为即使current 是 0,它肯定会显示日期和 0?如果没有,可能是因为您当时没有告诉它附加内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多