Answer the question
In order to leave comments, you need to log in
Where to catch a promise?
getChatByUid(uid) {
//ref на все комнаты/чаты пользователя
const userRoomsRef = db.ref('users').child(this.auth.uid).child('rooms');
let roomExists = false;
//получаем все комнаты и итерируем "room in rooms"
userRoomsRef.once('value', rooms => rooms.forEach(room => {
//получаем всех пользователей в комнате
this.getRoomUsers(room.key).then(users => {
//итерируем
for (var user in users) {
// если находим пользователя в текущей комнате значит новую создавать не надо
if (users.hasOwnProperty(user) && user === uid) {
//просто переключаемся на текущую комнату и пишем в переменную что комната существует
this.currentRoom = room.key;
roomExists = true;
}
}
})
})
//тут главная проблема, этот код выполнится раньше предыдущего блока
// и будет всегда создавать новую комнату
if ( !roomExists ) { this.createRoom(uid) };
//Двигать этот блок вверх тоже не получается он всеравно выполняется до всех итераций.
);
}
Answer the question
In order to leave comments, you need to log in
This is done via Promise.all , here is an example:
Is the foreach loop asynchronous in nodejs?
Here is the implementation on my example:
https://jsfiddle.net/btymLuhk/3/
Please note that it forEach
has been replaced by map
, since it Promise.all
needs an array of promises, which is formed.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question