まあ、私はあなたがそれを割り当てられたままにすることを強制するので、それへの明示的な参照を保持しないことを想定しています。
私が考えることができる最も単純なテストは、実際には多くのプロミスを割り当て、それらを解決しないことです:
var $q = angular.injector(["ng"]).get("$q");
setInterval(function () {
for (var i = 0; i < 100; i++) {
var $d = $q.defer();
$d.promise;
}
}, 10);
そして、ヒープ自体を監視します。Chromeプロファイリングツールで確認できるように、これにより、100個のプロミスを割り当てるために必要なメモリが蓄積され、JSFIddleページ全体で15メガバイト未満で「そのまま」残ります。
反対側から、ソースコードを見ると$q
グローバルポイントから特定のプロミスへの参照はなく、プロミスからコールバックへの参照しかないことがわかります。コードは非常に読みやすく、明確です。コールバックからpromiseへの参照がある場合はどうでしょうか。
var $q = angular.injector(["ng"]).get("$q");
console.log($q);
setInterval(function () {
for (var i = 0; i < 10; i++) {
var $d = $q.defer();
(function ($d) { // loop closure thing
$d.promise.then(function () {
console.log($d);
});
})($d);
}
}, 10);
したがって、最初の割り当ての後-それも同様に処理できるようです:)
彼の最後の例をさらに数分間実行すると、GCの興味深いパターンがいくつか表示されます。時間がかかることがわかりますが、コールバックを消去できます。
つまり、少なくとも最新のブラウザでは、外部参照がない限り、未解決のプロミスを心配する必要はありません。