Javascript 承诺垃圾的解析/拒绝功能是否在解析/拒绝后收集?
我正在尝试实现RPC代理。代理接收命令,将其发送到RPC服务器,等待结果,然后将结果发送到客户端。我的方法是这样的伪代码:Javascript 承诺垃圾的解析/拒绝功能是否在解析/拒绝后收集?,javascript,node.js,promise,garbage-collection,Javascript,Node.js,Promise,Garbage Collection,我正在尝试实现RPC代理。代理接收命令,将其发送到RPC服务器,等待结果,然后将结果发送到客户端。我的方法是这样的伪代码: function onClientCommand(cmd) { sendCommandToRPCServer.then(function(result){ returnResultToClient(cmd.client,result) }) } 如您所见,sendCommandToRPCServer返回一个承诺。我希望这个函数被频繁
function onClientCommand(cmd) {
sendCommandToRPCServer.then(function(result){
returnResultToClient(cmd.client,result)
})
}
如您所见,sendCommandToRPCServer返回一个承诺。我希望这个函数被频繁调用(每秒数千次调用)。当系统负载过重时,RPC服务器速度会变慢,代理内存中会有越来越多未解决的承诺
所以我的问题是:
如果代理在超时后拒绝承诺,这会从内存中删除承诺(例如,其解析和拒绝函数及其上下文,没有对该承诺的引用)?我知道我可以通过一系列回调来解决这个问题,并定期清除其中的旧项,但“类似承诺”的方法对我来说更好,因为有时候代理需要等待几个RPC调用,然后将结果返回给客户机,而承诺更容易实现 不,垃圾收集对它们没有任何不同的作用。与任何其他对象一样,当不再有任何对象引用函数时,函数将被垃圾收集 承诺实施中当然有一些“隐藏”的参考:
- 解析函数(
和解析
)确实引用了承诺拒绝
- 承诺引用所有
然后安装在其上的
回调
- 已安装的处理程序引用由
调用创建的承诺then()
关于您的特定用例,在等待相应的响应时将解析函数存储为回调是非常好的。请看一个例子。只需确保在使用函数后删除它们,以避免内存泄漏。因此,这意味着,如果承诺在一段时间后被拒绝,内存最终将被释放,不是吗?是的,应该是这样。只需确保释放存储解析函数的内存即可。