【发布时间】:2017-09-29 15:05:16
【问题描述】:
我有一个类来管理我在 NodeJS 中与我的套接字的连接。每当连接无法建立或丢失时,我想设置一个间隔以继续重试连接。但是,如果我调用setInterval 函数,我作为引用传递的方法现在在setInterval 的范围内。我的套接字类中的方法现在不再可用,除非我有一些巨大的嵌套语句,否则我无法重新连接套接字。主要问题是我在connect() 方法中创建的事件监听器现在在setInterval() 的范围内不再可用。
关于如何让它发挥作用的任何想法?
class SocketClass {
constructor() {
this.socket = {}
this.port = 0
this.host = ''
this.intervalID = null
}
connect(port, host) {
this.port = port;
this.host = host;
this.connectImpl()
this.socket.on('error', () => this.errorEventHandler())
this.socket.on('close', () => this.closeEventHandler())
}
connectEventHandler() {
console.log('Connected!')
if (this.intervalID !== null) {
clearInterval(this.intervalID);
}
}
errorEventHandler() {
console.log('Error!')
}
connectImpl() {
console.log('Trying to connect...')
this.socket = require('net').Socket().connect(this.port, this.host)
}
closeEventHandler() {
console.log('Connection lost')
this.intervalID = setInterval(() => this.connectImpl(), 1000)
// this.connectImpl() is called correctly but the event
// handlers defined in the constructor are now no longer bound
}
}
export default new SocketClass
【问题讨论】:
-
我发现反对票难以置信地难以理解。我的问题很简单,包括代码。有些人真的很喜欢砸那个否决按钮..
-
击败了我——有人也对我完美的答案投了反对票……
-
至于明确:“我作为参考传递的方法现在在 setInterval 的范围内” - 不,这是不正确的。 “我的套接字类中的方法现在不再可用” - 也不正确。 “我在 connect() 方法中创建的事件侦听器现在在 setInterval() 的范围内不再可用” - 也不正确。
标签: javascript node.js sockets