У меня есть компонент, который выполняет некоторые сервисные вызовы и получает обещания. После того, как промисы разрешены, я делаю detectChanges. Но иногда обещания разрешаются, когда представление компонента уже уничтожено, например, закрытая пользователем вкладка (внутренняя вкладка нашего приложения). В этом случае я получаю ViewDestroyedError: Attempt to use a destroyed view: detectChanges
. Несмотря на то, что я отсоединил представление об фазе уничтожения моего tab.component. Мой вопрос в том, что я делаю неправильно здесь?
Я безуспешно пытался отсоединить представление от обнаружения изменений на этапе уничтожения, обещание разрешается после этапа уничтожения, а detectChanges все еще вызывается. Я понимаю, что ngOnDestroy на самом деле не уничтожает класс и что код внутри него будет уничтожен на этапе сборки мусора.
вот пример кода из моего tab.component, который вызывает проблему
const promises:Promise<any>[] = [];
_.each(types, (type:string) => {
promises.push(this.service.getResultsBy(type))
})
Promise.all(promises)
.then((data) => {
//some code here
this.cd.detectChanges();
})
а в ngOnDestroy
я отсоединяю вид от C.D
ngOnDestroy() {
this.cd.detach();
}
Обещания важны для меня в этом случае, потому что мне нужно выполнить некоторые вычисления/сохранение состояния, даже если компонент будет уничтожен. Я просто хочу понять, как я могу достаточно хорошо отсоединить представление, чтобы мой код внутри обещания не вызывал попыток обнаружения изменений.