@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
  • Вопрос задан
  • 213 просмотров
Решения вопроса 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 снаружи
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 12:16
60000 руб./за проект
23 нояб. 2024, в 08:36
2000 руб./за проект
23 нояб. 2024, в 07:32
75000 руб./за проект