В SO много вопросов и решений, но ни один из них не работает при вызове из компонента init, который не является асинхронным. Вот пример:
private delay(ms: number)
{
return new Promise(resolve => setTimeout(resolve, ms));
}
private async sleepExample()
{
console.log("Beforep: " + new Date().toString());
// Sleep thread for 3 seconds
await this.delay(3000);
console.log("Afterp: " + new Date().toString());
}
ngOnInit(): void {
console.log('ngOnInit');
this.sleepExample();
console.log('After sleep');
// do lots of stuff
console.log('After lots of stuff);
}
Вывод на консоль выглядит следующим образом:
ngOnInit
Beforep: Mon Mar 18 2019 21:22:58 GMT+0200 (Eastern European Standard Time)
After sleep
…
After lots of stuff
Afterp: Mon Mar 18 2019 21:23:02 GMT+0200 (Eastern European Standard Time)
Как спать в ngOnInit? Причина, по которой я спрашиваю, состоит в том, что я пытаюсь создать прототип приложения с несколькими окнами, которое взаимодействует с localStorage. 1-е запущенное окно становится главным окном. Когда я запускаю 2 окна почти одновременно, последнее еще не находит материал 1-го окна в localStorage и думает, что это также mainWindow. Поэтому логичным решением было бы подождать 1-2 секунды и попытаться снова прочитать localStorage, если в окне ничего не найдено. После «сна» второе окно обнаружило бы, что окно на самом деле уже было, и оно становится дочерним окном.