NodeJs 中的 UnhandledPromiseRejectionWarning WebSocket 尽管实现时出错

UnhandledPromiseRejectionWarning WebSocket in NodeJs although implemented on error

我在使用 webSocket 连接(nodejs、ws)时遇到问题。我不时在控制台看到以下错误消息,但我不知道它来自哪里。出现错误时,互联网连接或 DNS 服务器似乎有问题。该应用程序应该能够处理断开的互联网连接。在出现错误的那一刻,整个应用程序停止了。

控制台错误:

(node:14656) UnhandledPromiseRejectionWarning: Error: Query timed out
at DNS._ontimeoutCheck (C:\Users\XYZ\Documents\nodedev\Server-DEV\node_modules\dns-socket\index.js:123:18)
at Timeout.ontimeoutCheck (C:\Users\XYZ\Documents\nodedev\Server-DEV\node_modules\dns-socket\index.js:53:10)
at listOnTimeout (internal/timers.js:531:17)
at processTimers (internal/timers.js:475:7)
(node:14656) UnhandledPromiseRejectionWarning: Error: Query timed out
Error: getaddrinfo ENOTFOUND connect.server.cloud
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:60:26)
Emitted 'error' event on ServerCloud instance at:
at ServerCloud.<anonymous> (C:\Users\XYZ\Documents\nodedev\Server- 
DEV\plugins\inbound\ks\ks.js:353:18)
at WebSocket.emit (events.js:223:5)
at ClientRequest.<anonymous> (C:\Users\XYZ\Documents\nodedev\Server- 
DEV\node_modules\ws\lib\websocket.js:554:15)
at ClientRequest.emit (events.js:223:5)
at TLSSocket.socketErrorListener (_http_client.js:406:9)
at TLSSocket.emit (events.js:223:5)
at emitErrorNT (internal/streams/destroy.js:92:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
at processTicksAndRejections (internal/process/task_queues.js:81:21) {
errno: 'ENOTFOUND',
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'connect.server.cloud'

我已经在我的代码中实现了 .on('error', (err) => { 方法:

this._ws.on('error', function (error) {
     this.connected = false;
     this.emit('error', error);
     this.LogAtMain('WebSocket Error: ' + error.message);
     console.log('Error message: ' + error.message);
});

与实现 on(error) 挂钩不同,我如何才能捕获此错误?

您在代码中的某处忘记处理承诺拒绝。这就是您收到该错误的原因。

你可以这样处理UnhandledPromiseRejectionWarning:

process.on('unhandledRejection', (reason, p) => {
  console.log('Unhandled Rejection at: Promise', p, 'reason:', reason.stack);
  // application specific logging, throwing an error, or other logic here
});