Задать вопрос
@Shimpanze

Async с методами класса не работает?

Как заставить работать метод sleep внутри конструктора?

class foo {
  constructor() {
    console.log('one');
    await this.sleep(2000); // <<<
    console.log('two');
    await this.sleep(2000); // <<<
    console.log('three');
  }

  async sleep(milliseconds) {
    const promise = new Promise(resolve => setTimeout(resolve, milliseconds));
    return promise;
  }
}

new foo();


Возвращаемая ошибка:

Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules
  • Вопрос задан
  • 215 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Сделайте метод static async create(), который выполняет все await'ы и возвращает новый экземпляр класса. Соответственно, вместо bar = new foo() в таком случае будет bar = await foo.create().
Ответ написан
IvanU7n
@IvanU7n
nothing interesting here
Как заставить работать метод sleep внутри конструктора?

никак, конструктор ЕМНИП не может быть async
но можно сделать async метод create и его вызывать в конструкторе, объект при этом понятное дело создастся, а промис от create можно положить в свойство, чтобы можно было его await снаружи
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
26 дек. 2024, в 14:50
2000 руб./за проект
26 дек. 2024, в 14:40
15000 руб./за проект
26 дек. 2024, в 14:27
100000 руб./за проект