@RaulDuke

Где зацепиться промисом?

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


Посоветуйте пожалуйста, что тут можно сделать, что-то голову всю сломал.
  • Вопрос задан
  • 345 просмотров
Решения вопроса 1
@Mr_Epic
Web программист
Это делается через Promise.all, вот пример:
В nodejs цикл foreach асинхронный?
Вот реализация на моём примере:
https://jsfiddle.net/btymLuhk/3/
Прошу заметить что forEachбыл заменён на map, так-как для Promise.all нужен массив промисов, который и формируется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы