글쎄, 나는 당신이 그것에 대한 명시적인 참조를 유지하지 않는다고 가정합니다.
내가 생각할 수있는 가장 간단한 테스트는 실제로 많은 약속을 할당하고 해결하지 않는 것입니다.
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 개의 promise를 할당하는 데 필요한 메모리를 축적 한 다음 전체 JSFIddle 페이지에 대해 15 메가 바이트 미만으로 "계속 유지" 합니다.
다른 쪽에서는 소스 코드를 보면$q
전역 지점에서 특정 약속에 대한 참조가없고 약속에서 콜백에 대한 참조 만 있음을 알 수 있습니다. 코드는 매우 읽기 쉽고 명확합니다. 그러나 콜백에서 프라 미스에 대한 참조가있는 경우 어떻게하는지 살펴 보겠습니다.
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) {
$d.promise.then(function () {
console.log($d);
});
})($d);
}
}, 10);
따라서 초기 할당 후-그것도 처리 할 수있는 것 같습니다. :)
그의 마지막 예제를 몇 분 더 실행하면 GC의 흥미로운 패턴을 볼 수도 있습니다. 시간이 걸리는 것을 알 수 있지만 콜백을 정리할 수 있습니다.
간단히 말해서-적어도 최신 브라우저에서는 외부 참조가없는 한 해결되지 않은 약속에 대해 걱정할 필요가 없습니다.