Я использую Firebase's .onSnapshot
, чтобы получить идентификатор пользователя, который в данный момент находится в сети, и сохранить каждый идентификатор в массиве. Я успешно развернул .onSnapshot
для получения идентификатора онлайн-пользователей, но в конце возвращаю пустой массив
var learning_language;
db.collection(ll_profile).doc(user_uid).get().then(function(doc) {
learning_language = doc.data().learning_language;
})
db.collection(ns_status).where("state", "==", "online").onSnapshot(function(snapshot) {
var ns_match = [ ];
snapshot.forEach(function(userSnapshot) {
db.collection("ns_profile").doc(userSnapshot.id).get().then(function(doc) {
spoken_language = doc.data().spoken_language;
if (learning_language == spoken_language) {
ns_match.push(userSnapshot.id);
console.log(ns_match);
}
})
})
return (ns_match);
Я пытаюсь сначала определить learning_language
, извлеченный из коллекции ll_profile
, с идентификатором текущего пользователя с именем user_uid.
Затем .onSnapshot прослушивает состояние другой группы пользователей в сети (которое автоматически обновляется, если пользователь в сети или оффлайн) внутри коллекции ns_status
. После этого возвращаемый пользователь из .onSnapshot
проверяется, совпадает ли поле spoken_language
внутри их документа (названное с соответствующим идентификатором uid) с learning_language
, определенным ранее. Если он совпадает, сохраните uid в массиве ns_match.
Значения внутри ns_match
верны. Я думаю .get()
выполняется асинхронно. Вот почему ns_match
возвращается пустым.
Как мне вернуть ns_match
в конце со всеми значениями, сохраненными правильно?
Заранее спасибо.