Javascript Promisify节点tls.connect方法
在成功连接时,使用Javascript Promisify节点tls.connect方法,javascript,node.js,promise,Javascript,Node.js,Promise,在成功连接时,使用socket实例解决tls.connect方法的正确方法是什么?我发现这有点棘手,因为似乎没有现成的方法来区分连接时的错误和与TCP服务器通信时的常规错误(连接成功后)。虽然看起来有点臭,但可能是 const connect = (port, host, options) => { /** * Some workaround to be able * to distinguish between error on connection * and e
socket
实例解决tls.connect
方法的正确方法是什么?我发现这有点棘手,因为似乎没有现成的方法来区分连接时的错误和与TCP服务器通信时的常规错误(连接成功后)。虽然看起来有点臭,但可能是
const connect = (port, host, options) => {
/**
* Some workaround to be able
* to distinguish between error on connection
* and error after connection was established successfully
*/
let connected = false
return new Promise((resolve, reject) => {
const socket = tls.connect(port, host, options, () => {
connected = true
return resolve(socket)
})
socket.on('data', (data) => {...})
socket.on('end', () => {...})
socket.on('disconnect', () => {...})
socket.on('error', (err) => {
if (!connected) {
return reject(err)
}
console.error(err)
})
})
}
立即返回套接字并向套接字添加一个
connected
promise,这样您就可以同步附加其他处理程序,并且仍然可以侦听带有promise的连接:
const connect = (port, host, options) => {
let resolve, reject;
var connected = new Promise((res, rej) => { resolve = res; reject = rej; });
const socket = tls.connect(port, host, options, resolve);
socket.connected = connected;
socket.on('error', reject); // it's fine to calll reject/resolve several times
return socket;
};
立即返回套接字并向套接字添加一个
connected
promise,这样您就可以同步附加其他处理程序,并且仍然可以侦听带有promise的连接:
const connect = (port, host, options) => {
let resolve, reject;
var connected = new Promise((res, rej) => { resolve = res; reject = rej; });
const socket = tls.connect(port, host, options, resolve);
socket.connected = connected;
socket.on('error', reject); // it's fine to calll reject/resolve several times
return socket;
};
这到底是怎么回事?im的目的是在应用程序即将启动时连接一次,并在初始连接后重新使用同一个套接字。假设应用程序启动并使用套接字对象连接解析。在您的示例中,当读取/写入套接字时发生错误,例如2小时后会发生什么,当调用此行时会发生什么
socket.on('error',reject)
绝对没有,承诺只针对连接而不是内容。这到底是如何工作的?im的目的是在应用程序即将启动时连接一次,并在初始连接后重新使用同一个套接字。假设应用程序启动并使用套接字对象连接解析。在您的示例中,如果读取/写入套接字时出现错误,2小时后会发生什么,调用此行时会发生什么socket.on('error',reject)
绝对没有什么,承诺只针对连接,而不是内容。