以前有人问过这个问题,但是提供的解决方案似乎都没有解决我的问题:
我在 Firebase 上有一个数据数组,我循环遍历这些数据以在我的应用程序中生成内容,使用“for”循环并因此生成一个索引值。这适用于预定的数据集,因为 ID 是简单的数组数字,但是当用户添加一些新数据(使用 push() 添加到数组中)时,firebase 会创建一个唯一的节点键(例如 -KyWRU7RRCE_V1w_OiZx)由于某种原因阻止我的循环工作的新数据集(控制台中没有显示错误)。
如果我转到 firebase 并手动确保新数据集具有数值,循环将再次开始工作。我如何做到这一点,以便当用户将新数据推送到数组时,生成的键是数字?我试过这个:
// Push new routine to Firebase.
var firebaseRef = firebase.database().ref();
var createdExercise = JSON.parse(localStorage.newRoutine);
$("#save").click(function()
{
firebaseRef.child("workouts").key(some_indexed_value).push(createdExercise);
});
但控制台返回以下错误:Uncaught TypeError: firebaseRef.child(...).key is not a function.
如果它有用,这是我正在使用的循环:
// Initialize Firebase.
firebase.initializeApp(config);
// Reference data.
var dbRef = firebase.database().ref().child("workouts");
// Sync with Firebase in real time.
dbRef.on("value", snap =>
{
var workouts = snap.val();
for (var i = 0; i < workouts.length; i++)
{
var routine = workouts[i].title;
var time = 3;
var exercises = workouts[i].exercises;
var icons;
$("#cardList").append(createCards(routine));
}
});
最佳答案
你的问题的答案是使用 .set()
而不是像这样的 .push()
firebaseRef.child("workouts").child(some_indexed_value).set(createdExercise);
这将使用您的自定义 key 在 workouts 下创建一个节点。
但建议使用push keys
并使用forEach()
方法获取结果,而不是使用for 循环
关于javascript - 推送到 Firebase 数组时写入预先确定的节点 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47206229/