Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js中无限循环中的承诺和异步/等待_Javascript_Node.js - Fatal编程技术网

Javascript node.js中无限循环中的承诺和异步/等待

Javascript node.js中无限循环中的承诺和异步/等待,javascript,node.js,Javascript,Node.js,我正在尝试在nodeJS服务器与外部遗留JAVA应用程序之间以请求/响应模式进行TCP/IP套接字通信,其中nodeJS是套接字客户端,外部应用程序是套接字服务器。在无限循环中周期性地从NodeJS客户端发出请求之后,我使用承诺等待服务器的响应 这在一段时间内可以正常工作,但在一段时间后会发出警告,指出nodeJS中超过了最大侦听器数。我可以通过增加nodeJS中侦听器的最大数量来抑制此警告,但这样做对吗?我认为这最终会导致内存泄漏。我猜这是因为每次promise调用都会创建一个事件监听器,它永

我正在尝试在nodeJS服务器与外部遗留JAVA应用程序之间以请求/响应模式进行TCP/IP套接字通信,其中nodeJS是套接字客户端,外部应用程序是套接字服务器。在无限循环中周期性地从NodeJS客户端发出请求之后,我使用承诺等待服务器的响应

这在一段时间内可以正常工作,但在一段时间后会发出警告,指出nodeJS中超过了最大侦听器数。我可以通过增加nodeJS中侦听器的最大数量来抑制此警告,但这样做对吗?我认为这最终会导致内存泄漏。我猜这是因为每次promise调用都会创建一个事件监听器,它永远不会被删除,当我在循环中调用promise函数时,监听器的数量会不断增加

所以我的问题是:

  • 有没有一种方法可以在承诺调用被调用一次后删除它创建的侦听器
  • 忽略警告并让执行继续进行,即使它处于一个永无止境的循环中,安全吗
  • 是否将承诺替换为异步/等待帮助?我想可能不会,因为这也会为每个等待呼叫添加一个新的侦听器
  • 你有什么建议或解决办法吗?据我所知,nodeJS中没有同步套接字调用

  • 您正在收听的是普通节点
    EventEmitter
    ?如果是这样,它有一个
    once()
    方法,该方法将在单个事件后自动注销侦听器。1)是的,如果事件发射器持续发出事件,则需要删除回调2)否,不应累积侦听器3)不能用async/Wait替换承诺。您只能用promise Wait语法替换promise
    then
    语法。请发布您的代码(您是如何收听事件的,以及如何在循环中使用承诺),以便我们可以建议更改什么要直接回答您的问题,您可能需要
    缓存创建后的承诺,并在以后可用时使用它,而不是创建一个新的。我建议您更好地理解NodeJS事件,因为大多数官方NodeJS API都是事件驱动的,您应该尝试使用回调而不是承诺,并避免使用无限循环,因为它在C/JAVA中是首选的,并且会尽可能多地消耗CPU负载。