R
R
RaulDuke2017-05-09 12:18:25
JavaScript
RaulDuke, 2017-05-09 12:18:25

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) };
  //Двигать этот блок вверх тоже не получается он всеравно выполняется до всех итераций.
  );
}

Please advise what can be done here, something broke the whole head.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
I
Ilya, 2017-05-09
@RaulDuke

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 forEachhas been replaced by map, since it Promise.allneeds an array of promises, which is formed.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question