似乎jQuery无法知道您的应用何时使用承诺完成。由于内存是在js中管理的,因此我认为,在所有对它的引用都消失之前,promise仍然存在。具体来说,它将无限期地存在,直到它被解析并且创建或使用它的代码已经完成退出(返回的函数等)。在这一点上,它将被收集。
任何人都可以验证我的假设吗?或者添加其他想法?
理解潜在的机制有一些重要的含义;内存泄漏,潜在的缓存机会(通过在解决后坚持承诺)等。我的下一步是深入了解jQuery源代码,但我希望在开始之前获得一些额外的指导。
答案 0 :(得分:2)
如果没有对已解决的承诺的引用,它将(最终)被处置。否则,它将被保存在内存中以防任何人想要访问其值。
在这种情况下,Promise与任何其他对象没有区别。
答案 1 :(得分:0)
如果进展完成,则仅在一种情况下删除承诺。
.done( updateFunc( i, resolveContexts, resolveValues ) )
...->
deferred.resolveWith( contexts, values );
要注意,resolveWith是jQuery约定的一部分,使用他们称之为元组的东西,在这种情况下解决,后缀为" With"为了基本上发出deferred.resolve的回调。这基本上使用与延迟对象相同的上下文来调用原始回调。
在内部激活列表回调时,jQuery会从为该列表保留的回调列表中删除它。
因此,承诺得到解决的唯一方法就是完成。没有时间来监控它。
如果在jQuery构造函数中传递了一个promise,那么promise将被附加到目标,或者将附加到jQuery的新实例。这将是包含这些延迟回调列表的列表的生命周期。
与任何其他垃圾收集一样,此生命周期将取决于浏览器(IE有时会做有趣的事情)。