powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / TypeScript. Как правильно дождаться await'a / promisa
2 сообщений из 2, страница 1 из 1
TypeScript. Как правильно дождаться await'a / promisa
    #40138286
GreyCrazyWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрейшего времени суток.
Возникла следующая задача ,Есть код на TypeScript, как правильно организовать ожидание события (конкретно - заполнение некоторой переменной, при получении данных с сокета)
Смысл примерно такой. Есть некоторый сервер с которого запрашиваются данные. Причем сервер не сразу их отдает, поэтому режим вопрос -ответ сделать не получится. Они принимает и выдает через некоторое время.
Есть принимающий сокет, на который льются данные, для того что какие то данные пришли есть событие
Код: TypeScript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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);
    });
  }
для отслеживания события написал
Код: TypeScript
1.
2.
3.
4.
5.
6.
private waitForMessage() {

   return new Promise<ExpectedDataEvent>(( resolve ) => {
   this.on('ExpectedDataEvent', resolve );
   });
}
теперь как правильно вызвать саму функцию, последний (неработающий) вариант выглядит так
Код: TypeScript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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;
  }
но в итоге все равно в консоли получаем следующий порядок
Код
1.
2.
3.
4.
5.
6.
7.
8.
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 но не ждет он нифига [:blink]
...
Рейтинг: 0 / 0
TypeScript. Как правильно дождаться await'a / promisa
    #40138320
Труба Кролега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GreyCrazyWolf [игнорируется] 
Код: TypeScript
1.
2.
3.
4.
5.
6.
7.
8.
9.
public async getValue2(key : string) : string {
 console.log('this.sendToServer(eval|' + key);
 this.sendToServer('eval|' + key);

 const info = await this.waitForMessage();
 console.log(info);
 this._currentHoverValue = info.value;
 return this._currentHoverValue;
}
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / TypeScript. Как правильно дождаться await'a / promisa
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (2): Анонимы (1), Bing Bot 8 мин.
Пользователи онлайн (9): Анонимы (6), Bing Bot 2 мин., RePredeclared 3 мин., Yandex Bot 5 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]