EventEmitter и проверка заполнения объекта

96
31 марта 2021, 12:50

Есть события (events) на которые я подписываюсь (данные события делают запрос на сторонний сервис и получают информацию). После получения информации, я заполняю объект данными.

Загвоздка в том, что я хочу дождаться заполнения объекта всеми данными и в дальнейшем передать его дальше...

Пример кода:

function checkAccountInfo() {
    let accountInfo = {};
    event.on('anyEvent1', function(name) {
        accountInfo.name = name;
    });
    event.on('anyEvent2', function(address) {
        accountInfo.address = address;
    });
}

Промисы (Promise) здесь, как я понял бесполезны, так как коннект/запрос/ответ с небольшой задержкой... И промис в любом случае даёт положительный (resolve) результат (даже если ответ ещё не пришёл)

Каким способом лучше проверить заполнение объекта? Или же есть более простой способ в моём случае?

Answer 1

Вы можете использовать промисы.

// Эмуляция асинхронных операций 
const event = { 
  on: function(name, callback) { 
    setTimeout(function() { 
      callback(name); 
    }, Math.round(Math.random() * 4000)); 
  } 
} 
 
function checkAccountInfo() { 
  let accountInfo = {}; 
  let promiseName = new Promise(resolve => { 
    event.on('anyEvent1', function(name) { 
      accountInfo.name = name; 
      resolve(name); 
    }); 
  }); 
 
  let promiseAddress = new Promise(resolve => { 
    event.on('anyEvent2', function(address) { 
      accountInfo.address = address; 
      resolve(address); 
    }); 
  }); 
  Promise.all([promiseName, promiseAddress]).then((res) => { 
    console.log(res, accountInfo); 
  }); 
} 
checkAccountInfo();

READ ALSO
Асинхроность при постановке команд в очередь

Асинхроность при постановке команд в очередь

Ajax запросы отрабатывают верно: получение статуса команды, удаление команды, постановка в очередьНе могу решить проблему, при клике осуществляет...

138
Упростить код JavaScript

Упростить код JavaScript

Я только начинаю изучать JS, возникла проблема, есть рабочий код, но сильно громоздкий и большой, помогите его упростить или уменьшить

113
Можно ли создать в canvas blur эффект на фото при mousemove?

Можно ли создать в canvas blur эффект на фото при mousemove?

Можно ли создать на canvas библиотеке Konvajs (или на каком-то другом) blur эффект на фото при mousemove?

113
Как писать тесты для строк?

Как писать тесты для строк?

У меня есть функция которая берет строку и проверяет является ли она CSS функцией hslaCSS понимает разное написание этой функции — с тремя и четырьмя...

121