背景には、元々 angularjs で構築されたアプリがあり、現在は UpgradeModule を使用した angularjs/ angular ハイブリッドです。角度のあるゾーンから外れてゾーンに入るという問題が進行中<root>
です。かなり再現性のある例を見つけました。
<root>
ゾーンで立ち往生するというかなり頻繁に再発する問題に遭遇し、これに要約されました. したがって、プロミスを作成する 3 つの方法はすべて角度ゾーンから始まります。
new Promise(blahblah)
ZoneAwarePromise を返します
new $q(blahblah)
プロミスを返します
let def = $q.defer(); return def.promise
プロミスを返します
したがって、これは $q promise がゾーンでパッチされていないように見えるため、角度ゾーンが維持されておらず、コールバックが<root>
. その結果、角度のある半分が非常に遅くなり (これが発生すると)、何らかのリモート要求からのプロミスのコールバックで何かが適用/ダイジェストを実行すると、時折ダイジェスト エラーが発生します。一般的な原因は $http と angularfire ライブラリからのコールバックなどです。
簡単に言えば、UpgradeModule は angularjs の約束 ($q) を ZoneAwarePromise のものとしてパッチすることを目的としていますか? それは私が期待していたものです。
編集: これは、StackBlitz のより基本的な例です。この例は、私のアプリと同じことを示しています: UpgradeModule は $q promises にパッチを適用しません: https://stackblitz.com/edit/github-fwbk4x?file=src%2Fapp%2Fhome%2Fapp.component.ts