Вы можете использовать NgZone на угловом 4:
import { NgZone } from '@angular/core';
constructor(private zone: NgZone) {}
print() {
this.zone.runOutsideAngular(() => window.print());
}
Это потому, что setTimeout
не возвращает обещание await
в вашей функции main
. Сам setTimeout выполняется синхронно. Он добавляет к циклу событий обратный вызов, который передается в качестве аргумента для выполнения в указанное время.
Также в этом коде возврат вашего обратного вызова ничего не значит, так как обратный вызов будет запущен в течение 1 секунды, и возвращаемое значение не будет никуда.
Ключевое слово async
говорит вам, что функции возвращают обещание и могут содержать await
код. Таким образом, поскольку в вашем коде нет ожидания, он выглядит как
function moveOneStepAsync() {
setTimeout(() => {
return console.log('Hello world!');
}, 1000);
return Promise.resolve();
}
. Таким образом, ваш await
в основном будет ожидать один тик цикла событий, чтобы перейти к следующему «шагу»
Читать о setTimeout, цикле событий и о том, что ожидает, чтобы понять его более подробно