javascript 如何在一个表中从firebase中检索一个值?

yh2wf1be  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(84)

让我首先展示一下我所拥有的和我迄今为止所尝试的:

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中有从第一个引用检索的数据:Datah/真实的,并且此数据在 quote 下包含一个字符串值,对于我要检索的每个数据,我希望使用 quote 从另一个引用中检索相关数据:Datah/Prices。在该引用中,我只想从等于 quote 的子项中检索数据,因此:Datah/Prices/quote。当我获得此值时,我希望用它填充我的表。
我设法获得了第一个数据,它正确地填充了我的表,挑战在于第二个快照,它应该返回 current,因为它仍然返回预定义的0,但是在控制台上:console.log(snapshot.key+" : "+snapshot.child("price").val());它显示它实际上正在检索值,但为什么在我的表中 current 总是0,而在控制台中不是0

cwxwcias

cwxwcias1#

这是因为代码异步运行

这段代码正确地获取了当前价格,但只是在其余代码运行之后。

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,所以我可能没有在块中移动 * 完全 * 正确的代码。

相关问题