完成承诺后进一步获得GC' d?

时间:2017-11-20 17:25:52

标签: javascript promise garbage-collection

如果您在长时间运行的流程中将promise添加到promise链中:

q = (q + nextPromise)

链中已完成的承诺是否会收集垃圾,还是会泄漏内存?

通过在长时间运行的应用程序中将链var(q)重新分配给sum来添加到链中是否安全?有没有更好的方法来创建基于承诺的队列?

enter image description here

从这个例子看来它似乎是GC' d,但这只是超过30秒?

2 个答案:

答案 0 :(得分:1)

承诺与任何其他对象没有什么不同;一旦没有更多参考文献,它们将被GC。

在承诺得到解决之前,其resolve回调是一个引用(如果该引用丢失,则承诺无法解析,并且可能是GC)。

答案 1 :(得分:1)

  

链中已完成的承诺是否会收集垃圾?

是的,它们没有被任何东西引用 - 既不是一个出色的异步任务(通过resolve回调),也不是全局q变量。您可以在调试器屏幕截图中看到它们被收集。

then创建的承诺未引用回调链接的承诺。只有回调(存储在附加的承诺中,甚至可能只通过解析器可能只有弱)引用了新承诺的解析能力。一旦确定,就没有任何参考保留。

  

通过在长时间运行的应用程序中将链变量q重新分配给q + nextPromise来添加到链中是否安全?

是的,这是一个非常精细的模式。只需确保您没有比解决它们更快的方式排队新的链接: - )