Фон, есть приложение, созданное изначально с angularjs, теперь это angularjs / angular, использующий UpgradeModule.Возникла проблема с выпадением из угловой зоны и попаданием в зону <root>
.Удар по достаточно повторяемому примеру.
Удар по довольно часто повторяющейся проблеме застревания в зоне <root>
, и это было сведено к этому.Итак, 3 способа создания обещаний, все начинающиеся в угловой зоне.
new Promise(blahblah)
возвращает ZoneAwarePromise
new $q(blahblah)
возвращает обещание
let def = $q.defer(); return def.promise
возвращает Promise
Итак, мне кажется, что $ q обещания не исправляются с зоной, и поэтому угловая зона не поддерживается и обратные вызовы заканчиваютсяв <root>
.Это приводит к тому, что на угловой половине дела идут довольно медленно (как только это произошло), и иногда возникают ошибки дайджеста, когда что-то запускает применение / дайджест в обратном вызове обещания из какого-то удаленного запроса.Распространенными виновниками являются $ http и обратные вызовы из библиотеки angularfire и т. Д.
Итак ... проще говоря, предназначен ли модуль UpgradeModule для исправления обещаний angularjs ($ q) как ZoneAwarePromise?Это то, что я ожидал.
РЕДАКТИРОВАТЬ: Вот более простой пример на StackBlitz.Этот пример показывает то же, что и в моем приложении: UpgradeModule не исправляет обещания $ q: https://stackblitz.com/edit/github-fwbk4x?file=src%2Fapp%2Fhome%2Fapp.component.ts