Javascript 方法是一个接一个地更新数组值,而不是一次更新所有数组值
我试图在不刷新的情况下更新用户在公司页面上下的订单的值。为此,我使用了jQuery.on方法。但是,这将返回我为订单生成的数组中的值,而不是一次返回所有值。这只是firebase的问题还是我的代码 这是我的密码: 当我得到这些值时: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
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!');
});
});
});