У меня есть вопрос об асинхронных событиях (таких как наблюдаемые события) в хуках жизненного цикла.
Если мне нужно извлечь данные из серверной части в ngOnInit, а затем назначить свойство в классе, например:
data: string;
ngOnInit() {
this.httpService.get(...).subscribe(data => this.data = data);
}
ngAfgerViewInit() {}
Здесь, поскольку Observable делает функцию обратного вызова, которая будет обрабатываться как событие, и go попадет в очередь стеков событий. Итак, мой вопрос, когда будет выполняться хук ngAfterViewInit ()?
- после завершения назначения данных, затем go до следующего перехвата жизненного цикла.
- продолжайте до конца sh всех перехватов жизненного цикла, затем выполните присваивание данных.
Какой из них правильный?
Я провел несколько экспериментов. Пожалуйста, смотрите детали ниже. Кстати, я использую выбор магазина ngrx для создания наблюдаемого здесь.
1. Я консоль, чтобы увидеть последовательность выполнения.
мой код:
консоль:
функция обратного вызова выполняется как синхронная, но не выполняется после ngAfterViewInit.
2. Я добавляю еще один оператор ngrx «of» для создания другого Observable в ngOnInit.
код:
консоль:
это то же самое, что и # 1, функция обратного вызова выполняется перед ngAfterViewInit, подобно синхронному.
3. Я добавляю еще один оператор ngrx «таймер» для создания другого Observable в ngOnInit.
код:
консоль:
на этот раз функция обратного вызова выполняется после ngAfterViewInit и обрабатывается как асинхронная.
Так что это меня очень смущает. Некоторые наблюдаемые обрабатываются как асинхронные, а некоторые - как синхронные. Кто-нибудь знает почему?