JavaScript是否承诺在未被拒绝或解决时创建内存泄漏?

我处于需要以“并行”方式执行异步函数并以最佳结果继续执行程序的情况。 因此我写了这样的东西:

var p = [];

for (var i = 0; i < 10; ++i) (function (index) {
  p.push(new Promise(function (resolve, reject) {
    setTimeout(function () {
      var success = Math.random() > 0.7;

      console.log("Resolving", index, "as", success ? "success" : "failure");

      success && resolve(index);
    }, Math.random() * 5000 + 200);
  }));
})(i);

Promise.race(p).then(function (res) {
  console.log("FOUND", res);
}).catch(function (err) {
  console.log("ERROR", err);
});

现在,我想知道在使用承诺时这是否是一种好的做法? 不是经常解决或拒绝它们,那么任何东西都会造成内存泄漏? 他们每次都最终被GC'ed了吗?


这将泄漏的唯一原因是因为p是一个全球性的。 设置p = null; 最后还是避免使用全局变量:

var console = { log: function(msg) { div.innerHTML += msg + "<br>"; }};

Promise.race(new Array(10).fill(0).map(function(entry, index) {
  return (function(index) {
    return new Promise(function(resolve) {
      setTimeout(function() {
        var success = Math.random() > 0.7;
        console.log((success? "R":"Not r") + "esolving "+ index +".");
        success && resolve(index);
      }, Math.random() * 5000 + 200);
    });
  })(index);
})).then(function (res) {
    console.log("FOUND: " + res);
}).catch(function (err) {
    console.log("ERROR: " + err);
});
<div id="div"></div>
链接地址: http://www.djcxy.com/p/27597.html

上一篇: Does JavaScript promise create memory leaks when not rejected or resolved?

下一篇: Enable mysqli in my in