Я работаю с Firebase и Javascript.Мне нужно получить ключ к ссылке, которая была создана push()
.
Мой код ждет обещания, возвращенного push, и затем читает ключ.Это выглядит так:
firebase.database().ref("preds/").push()
.then(function(newReference){
console.log(newReference.key);
});
Теперь я смотрю на фрагмент кода, написанный коллегой.Он не использует обещания.Вместо этого он напрямую использует ключ:
var newReference = firebase.database().ref("preds/").push()
console.log(newReference.key)
Это выглядит намного лучше (особенно потому, что реальный код длиннее, чем в этих примерах).Но я подозреваю, что это может быть состояние гонки.Что если мы все еще ждем ответа от базы данных и ключ уже используется?Но я не смог создать проблем с его кодом.
Я посмотрел на Firebase docs , и они немного сбивают с толку.В нем говорится, что push()
возвращает:
Объединенное обещание и справка;разрешается, когда запись завершена, но может быть немедленно использована в качестве ссылки на дочернее местоположение.
Их пример выглядит следующим образом:
var messageListRef = firebase.database().ref('message_list');
var newMessageRef = messageListRef.push();
newMessageRef.set({
'user_id': 'ada',
'text': 'The Analytical Engine weaves algebraical patterns just as the Jacquard loom weaves flowers and leaves.'
});
Thisвыглядит как использование newReference.key
, но ничего из этого не блокирует.Если я правильно понимаю, эти функции просто связаны для асинхронного выполнения.Тем не менее, они говорят, что ссылка может быть использована немедленно для доступа к child location
.
Я искал SO и нашел этот вопрос: В Firebase при использовании push () Как мне получить уникальный идентификатор Dan_Mindru говорит:
Любой, кто найдет этот вопрос и использует Firebase 3+, получит уникальные идентификаторы автоматически сгенерированных объектов после push, используя свойство ключа (не метод) в обещанииснимок
И его код выглядит точно так же, как и моя первоначальная версия:
firebase
.ref('item')
.push({...})
.then((snap) => {
const key = snap.key
})
Я знаю, что это очень распространенный вопрос о firebase, но я надеюсь, что предоставил достаточно контекста, чтобы оправдатьмое замешательство.Как правильно получить ключ для вновь созданной ссылки?Нужно ли ждать обещание или я могу получить прямой доступ к ключу?