Почему один код дает мне правильный ключ от firebase, а другой - нет? - PullRequest
0 голосов
/ 01 августа 2020

Я работал над простым проектом каталога карточек, который принимает данные из формы и отображает их на карточке.

На каждой карточке есть возможность полностью удалить карточку или установить / снять отметку коробка. Для этого мне нужно получить доступ к объекту в базе данных реального времени firebase.

Каждый объект создается .push() и генерирует случайное имя ключа, и я хотел бы получить доступ к этому ключу имя, чтобы внести изменения в объект или удалить его.

Я прочитал документацию по адресу https://firebase.google.com/docs/database/web/read-and-write, и она предоставляет способ получить ключ перед нажатием. Это сработало в приведенном примере, который использовал update(), но когда я попробовал это с моим push(), ключи не совпали.

Кроме того, поскольку мне нужно будет использовать ключ в отдельном функции, которая отображает карту, я попытался сделать ее глобальной переменной, и она вернула undefined.

Можете ли вы сказать мне, как я могу получить ключ для использования в другой функции?

Спасибо !

Когда я console.log newPostKey внутри функции здесь, он соответствует тому, что находится в базе данных, но когда я делаю это снаружи, я получаю undefined.

var database = firebase.database();
let newPostKey;

function writeNewPost(uid, username, picture, title, body) {
  // A post entry.
  var postData = {
    author: username,
    uid: uid,
    body: body,
    title: title,
    starCount: 0,
    authorPic: picture
  };

  // Get a key for a new Post.
  var newPostKey = firebase.database().ref().child('posts').push().key;
  console.log(newPostKey);

  // Write the new post's data simultaneously in the posts list and the user's post list.
  var updates = {};
  updates['/posts/' + newPostKey] = postData;

  return firebase.database().ref().update(updates);
}

writeNewPost("zzz", "drew", "bucolic", "bobross", "beardo");
console.log(newPostKey);

Это возвращает a newPostKey, что не соответствует тому, что я вижу в Firebase. Снаружи тоже не определено.

function writeNewPost(uid, username, picture, title, body) {
  var postData = {
    author: username,
    uid: uid,
    body: body,
    title: title,
    starCount: 0,
    authorPic: picture
  };

  var newPostKey = firebase.database().ref().child('posts').push().key;

  console.log(newPostKey);

  return firebase.database().ref().child('posts').push(postData);
};
writeNewPost("zzz", "drew", "bucolic", "bobross", "beardo");
console.log(newPostKey);

1 Ответ

1 голос
/ 01 августа 2020

Каждый раз, когда вы вызываете push по ссылке, он генерирует новый ключ. Поскольку вы дважды вызываете push() во втором фрагменте, вы генерируете два ключа.

Скорее всего, вы хотите сделать это:

var newPostKey;
function writeNewPost(uid, username, picture, title, body) {
  var postData = {
    author: username,
    uid: uid,
    body: body,
    title: title,
    starCount: 0,
    authorPic: picture
  };

  newPostKey = firebase.database().ref().child('posts').push().key;

  console.log(newPostKey);

  return firebase.database().ref().child('posts').child(newPostKey).set(postData);
};
writeNewPost("zzz", "drew", "bucolic", "bobross", "beardo");
console.log(newPostKey);

Итак, используя .child(newPostKey).set(postData) вместо push(postData) данные добавляются к дочернему элементу newPostKey вместо нового ключа.

Поскольку вы также можете получить ключ из DatabaseReference, возвращаемого pu sh, этот фрагмент также можно записать как:

function writeNewPost(uid, username, picture, title, body) {
  return firebase.database().ref().child('posts').push({
    author: username,
    uid: uid,
    body: body,
    title: title,
    starCount: 0,
    authorPic: picture
  });
};
let ref = writeNewPost("zzz", "drew", "bucolic", "bobross", "beardo");
console.log(ref.key);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...