#javascript #firebase #google-chrome-extension
# #javascript #firebase #google-chrome-расширение
Вопрос:
Итак, у меня есть 2 плейлиста, созданных в моей базе данных с именем списка воспроизведения и идентификатором. Я пытаюсь отобразить список созданных мной плейлистов. Я смог Console.log (плейлисты) получить массив из моих 2 объектов с нужными данными в нем. но я не могу получить доступ к своим объектам в моем массиве. Я пробовал forEach, map, даже просто просматривая первый индекс, я всегда получаю undefined в своей консоли. Хотелось бы получить помощь. Просмотр изображения для результатов консоли snipit
function getPlayLists(b) {
firebase.auth().onAuthStateChanged(function (user) {
if (user) {
var uid = auth.currentUser.uid;
var playlists = [];
database.ref(uid).on("value", function (snapshot) {
snapshot.forEach(function (childSnapshot) {
playlists.push({
playlistName: childSnapshot.val().name,
id: childSnapshot.val().idKey,
});
});
});
console.log(playlists);
console.log(playlists[0]);
} else {
console.log("No user is signed in.");
}
});
}
Комментарии:
1.
database.ref(uid).on("value", function (snapshot) {
является асинхронным, он в основном всегда выполняется после вашихconsole.log
инструкций. Переместитеconsole.log
в телоon("value", function (snapshot) {
или оберните эту функциональность обещанием или обратным вызовом.
Ответ №1:
Ваша консоль.операторы журнала вызываются перед заполнением списка воспроизведения данными. Переместите консоль.входит в функцию, которая передается в метод database.ref(uid).on
Ответ №2:
Вы привязываете функцию при каждом обновлении к значениям, поэтому регистрируйте эти значения в определенном обратном вызове и используйте функцию map для получения значений из моментального снимка
database.ref(uid).on("value", (snapshot) => {
const playlists = snapshot.map((childSnapshot) => ({
playlistName: childSnapshot.val().name,
id: childSnapshot.val().idKey
}));
console.log(playlists);
console.log(playlists[0]);
});