Написание асинхронной / ожидающей версии обещания

Вы можете использовать NgZone на угловом 4:

import { NgZone } from '@angular/core';

constructor(private zone: NgZone) {}

print() {
    this.zone.runOutsideAngular(() => window.print());
}
2
задан Uğur Kaya 15 January 2019 в 20:09
поделиться

1 ответ

Это потому, что setTimeout не возвращает обещание await в вашей функции main. Сам setTimeout выполняется синхронно. Он добавляет к циклу событий обратный вызов, который передается в качестве аргумента для выполнения в указанное время.

Также в этом коде возврат вашего обратного вызова ничего не значит, так как обратный вызов будет запущен в течение 1 секунды, и возвращаемое значение не будет никуда.

Ключевое слово

async говорит вам, что функции возвращают обещание и могут содержать await код. Таким образом, поскольку в вашем коде нет ожидания, он выглядит как

function moveOneStepAsync() {
  setTimeout(() => {
    return console.log('Hello world!');
  }, 1000);
  return Promise.resolve();
}

. Таким образом, ваш await в основном будет ожидать один тик цикла событий, чтобы перейти к следующему «шагу»

Читать о setTimeout, цикле событий и о том, что ожидает, чтобы понять его более подробно

0
ответ дан Danil Gudz 15 January 2019 в 20:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: