Javascript 方法是一个接一个地更新数组值,而不是一次更新所有数组值

Javascript 方法是一个接一个地更新数组值,而不是一次更新所有数组值,javascript,html,firebase,firebase-realtime-database,Javascript,Html,Firebase,Firebase Realtime Database,我试图在不刷新的情况下更新用户在公司页面上下的订单的值。为此,我使用了jQuery.on方法。但是,这将返回我为订单生成的数组中的值,而不是一次返回所有值。这只是firebase的问题还是我的代码 这是我的密码: 当我得到这些值时: firebase.database().ref('Orders/' + user_id).on('value', function(snapshot) { // Check if the user has any pending orders

我试图在不刷新的情况下更新用户在公司页面上下的订单的值。为此,我使用了jQuery.on方法。但是,这将返回我为订单生成的数组中的值,而不是一次返回所有值。这只是firebase的问题还是我的代码

这是我的密码:

当我得到这些值时:

 firebase.database().ref('Orders/' + user_id).on('value',  function(snapshot) {
     // Check if the user has any pending orders 
     if (snapshot.val() === null) {
         // No Pending Orders are Present
          $('.order_content-parent').html(' <div class="order_content">Hooray! You have no pending orders!</div>');

     } else {

         // One or more pending orders are present


          console.log(snapshot.val());


      snapshot.forEach(function(child){
           $('.order_content-parent').html(' <div class="order_content"></div>');

          var order = child.val().Order;

var key = child.key;
  console.log('Key is : '+key);
  getOrders(key);

});
这是我从数据库打印值时的控制台:

以下是我的数据库结构:

有人能帮忙吗

提前感谢,


汤姆

我认为这是预期的行为,因为他说:

每次在指定的数据库引用处更改数据(包括对子项的更改)时,都会调用value事件

由于您的插入在每个
循环中,因此它们会一个接一个地插入,从而多次触发
.on()
侦听器

您可以尝试一次插入所有订单。请尝试这种方法,并让我知道它是否有效:

firebase.auth().onAuthStateChanged(function (user) {
    if (!user) {
        console.log("No user is signed in");
        return;
    }
    var myId = user.uid;
    var orders = [];

    // Get the orders to insert first
    $('.postData').each(function () {
        var data = $(this).html();
        orders.push(data);
    });

    // Then, insert them all at once
    var database = firebase.database();
    database.ref('Orders/' + user_id + '/' + myId).set({
        Order: orders
    }, function (error) {
        if (error) {
            // The write failed...
            alert(error);
            return;
        } 
        $('.postData').html('Connecting...');
        database.ref('Orders/' + myId).set({
            Order: orders,
            For: user_id
        }, function (error) {
            if (error) {
                // The write failed...
                alert(error);
                return;
            } 
            $('.postData').html('Order Successfully Placed!');
        });
    });
});

它起作用了,但您可以在代码中解释返回的原因吗?当然,
返回
会停止函数中的代码执行,直到该点。我在这里首先使用它们来处理错误,以避免使用一些
else
子句,使代码在我看来更“干净”和可读。当然,如果愿意,您可以返回到
if
else
。您可以在此处阅读相关文章:
firebase.auth().onAuthStateChanged(function (user) {
    if (!user) {
        console.log("No user is signed in");
        return;
    }
    var myId = user.uid;
    var orders = [];

    // Get the orders to insert first
    $('.postData').each(function () {
        var data = $(this).html();
        orders.push(data);
    });

    // Then, insert them all at once
    var database = firebase.database();
    database.ref('Orders/' + user_id + '/' + myId).set({
        Order: orders
    }, function (error) {
        if (error) {
            // The write failed...
            alert(error);
            return;
        } 
        $('.postData').html('Connecting...');
        database.ref('Orders/' + myId).set({
            Order: orders,
            For: user_id
        }, function (error) {
            if (error) {
                // The write failed...
                alert(error);
                return;
            } 
            $('.postData').html('Order Successfully Placed!');
        });
    });
});