Дождаться выполнения 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 но не ждет он ;(