当你不再持有对它的引用时,ES6-Promise会发生什么?

时间:2016-02-25 21:06:57

标签: javascript garbage-collection es6-promise

背景

您可以从以下代码中看到:

var foo1 = new Promise (function (resolve, reject){};

var foo2 = new Promise (function (resolve, reject) {

    resolve('succes!');
});

var foo3 = new Promise (function (resolve, reject) {

    reject(Error('Failure!'));
});

console.log (typeof foo1 === 'object'); // true
console.log (Object.getOwnPropertyNames(foo1)); // []
console.log (foo1.length); // undefined

console.log (foo1); // Promise { <pending> }
console.log (foo2); // Promise { 'succes!' }
console.log (foo3); // Promise { <rejected> [Error: Failure!] }

引用Promise的变量引用了一个特殊的Promise对象,该对象包含您传递给的函数的 state results Promise构造函数。如果你然后设置:

foo1 = null;
foo2 = null;
foo3 = null;

您无法再访问此状态或结果。

问题

在上述情况下是否Promise被垃圾收集,如果不是,那是否会造成导致内存泄漏的风险?

1 个答案:

答案 0 :(得分:4)

  

在上述情况下,Promise是否会收集垃圾?

是。在这方面,promise对象就像其他所有对象一样。

某些实现(Firefox)确实有特殊行为,其中未处理拒绝检测依赖于垃圾收集,但这并没有真正改变所收集的promise对象的任何内容。