Javascript 角度:关于Websocket重联的一个问题

Javascript 角度:关于Websocket重联的一个问题,javascript,angular,typescript,websocket,Javascript,Angular,Typescript,Websocket,我设置了一个超时函数,在连接断开后等待并触发重新连接 我的角度是11 以下是我的WebsocketService代码: import { Injectable } from '@angular/core' @Injectable() export class WebSocketService { constructor() { this.init(); } init() { var ws = new WebSocket('ws

我设置了一个超时函数,在连接断开后等待并触发重新连接

我的角度是11

以下是我的WebsocketService代码:

import { Injectable } from '@angular/core'

@Injectable()
export class WebSocketService {
    
    constructor() {
        this.init();
    }

    init() {
        var ws = new WebSocket('ws://localhost:8080');

        ws.onopen = (event) => {
            console.log('WebSocket connected');
        }

        ws.onmessage = (event) => {
            const data = JSON.parse(event.data);
            console.log(data);
        }

        ws.onclose = (event) => {
            console.log('Close WebSocket connection');
            setTimeout(this.init, 1000);
        }

        ws.onerror = (event) => {
            console.log(`WebSocket connection error: ${event}`);
            ws.close();
        }
    }
}
我的问题是setTimeout函数总是被触发两次

那它就不起作用了

你有什么建议吗


谢谢

在开始超时后,创建一个变量并清除超时。在
ws.onclose
函数中,需要清除上一个超时,然后重新开始。@akhilarvind它不起作用。变量总是从setTimeout中获取未定义的值。您是如何尝试的,您可以共享代码块吗?@AkhilAravind我找到了答案。我应该将其修改为this.timer=setTimeout(this.init.bind(this),1000)。裁判: