Я пытаюсь написать приложение, используя firebase. Я хочу сохранить объекты поиска JSON в searches/
и ссылку на каждый из них в таблице, принадлежащей пользователю, который выполнил поиск. Вот моя попытка:
var firebase = require("firebase");
firebase.initializeApp(firebaseConfig);
var database = firebase.database();
/*
* Inserts a search into the database
*/
this.addSearchToDB = function(positive, negative, neutral){
let today = new Date();
let dateCreated = today.getFullYear()+"-"+(today.getMonth()+1)+"-"+today.getDate();
var search = {
"query": searchInput,
"location": location,
"until": date,
"dateCreated": dateCreated,
"amount": tweetAmount,
"positive": positive,
"negative": negative,
"neutral": neutral
};
//setup of path to reference the data
var searchesRef = database.ref("searches");
var newSearchKey = searchesRef.push(search).key;
console.log("newSearchRef key:");
console.log(newSearchKey);
let user = firebase.auth().currentUser;
let uid = user.uid;
console.log("Curr user id: "+uid);
let userRef = database.ref("users/"+uid);
let currUserSearches;
userRef.once("value").then( (value) => {
currUserSearches = value;
});
console.log("Current user searches");
console.log(currUserSearches);
if (currUserSearches === undefined)
currUserSearches = [];
currUserSearches.push(newSearchKey);
userRef.set(currUserSearches).then( () => {
database.ref("users/"+uid).once("value").then((value)=>{
console.log(value.val());
});
});
}
На первой вставке это происходит:
- Я получаю
newSearchKey
(успешно регистрируется в консоли)
- Я получаю идентификатор пользователя
currentUser
(успешно регистрируется на консоли)
currUserSearches
не определено. (записывает undefined
на консоль)
- При обратном вызове
userRef.set()
список, содержащий newSearchKey
, найден и выведен на консоль.
Это все хорошо. Это то, что я ожидал от первой вставки. НО, когда я вставляю снова, точно такая же процедура повторяется, что означает, что currUserSearches
снова не определено. Это конечно неправильно. currUserSearches
должен содержать тот ключ, который я только что вставил. Но похоже, что забыли, что я вставил.
Что здесь происходит, и как мне добиться желаемого поведения?