Дождаться выполнения await / promise перед выполнением следующей строки кода

Добрейшего времени суток. Возникла следующая задача ,Есть код на TypeScript, как правильно организовать ожидание события (конкретно - заполнение некоторой переменной, при получении данных с сокета) Смысл примерно такой. Есть некоторый сервер с которого запрашиваются данные. Причем сервер не сразу их отдает, поэтому режим вопрос -ответ сделать не получится. Они принимает и выдает через некоторое время. Есть принимающий сокет, на который льются данные, для того что какие то данные пришли есть событие

export interface ExpectedDataEvent {
  name: string;
  value: string;
}

прицеплено вот так
private constructor() {
    super();
    this._instanceId = Data.getNextId();
    this.on('ExpectedDataEvent', (ev:  ExpectedDataEvent ) => {
      console.log('ExpectedDataEvent', ev.name, ev.value);
    });
  }

для отслеживания события написал

private waitForMessage() {

   return new Promise<ExpectedDataEvent>(( resolve ) => {
   this.on('ExpectedDataEvent', resolve );
   });
}

теперь как правильно вызвать саму функцию, последний (неработающий) вариант выглядит так

public getValue2(key : string) : string {

  console.log('this.sendToServer(eval|' + key);

  this.sendToServer('eval|' + key); // отправляем запрос ,теперь нужно ждать пока сервер будет думать

  // попытка родить получение данных
  this.waitForMessage().then( (info) => {
      console.log("message from promise");
      console.log(info.value);
      this._currentHoverValue = info.value;
    });

  // console.log(message);

  console.log("before return");

  return this._currentHoverValue;
  }

но в итоге все равно в консоли получаем следующий порядок

this.sendToServer(eval|Human
Sended eval|Human                      // собственно, отработала функция отправки

before return                          // а мы уже в конце и возвращаем пусто

ExpectedDataEvent eval Human = {'Иванов И.И.',22,0}  //и вот уже только сейчас произошло событие
message from promise
Human = {'Иванов И.И.',22,0}           // и пришли данные с промиса

В итоге хотелось бы как то тормозить код до получения промиса (в идеале еще ограничить таймером в 5-7 секунд) Как дежурный и костыльный вариант - дернуть setTimeout по 1 сек 5 раз, после каждого раза проверяя переменную, не совсем аккуратно, хотелось бы до конца понять как сделать правильно пробовал разные рецепты типа https://stackoverflow.com/questions/38884522/why-is-my-asynchronous-function-returning-promise-pending-instead-of-a-val но не ждет он ;(


Ответы (0 шт):