Невозможно переподключиться к сокету после тайм-аута - PullRequest
1 голос
/ 30 января 2020

У меня есть этот код в качестве службы в моем приложении angular:

import * as io from 'socket.io-client';
import { Observable } from 'rxjs'

export class AppChatService {
    private url = 'http://localhost:3000';
    private socket;    



    constructor() {

        this.socket = io.connect( this.url);

    this.socket.on('connect', function(){
    console.log('connection established');


   });

    this.socket.on('disconnect', function(){
        console.log('reached on disconnect function');
        this.socket.socket.connect();
    }); 



  }



    public disconnectManually(){
        this.socket.disconnect();
        console.log('disconnected manually');
    }


    public sendMessage(message) {
        this.socket.emit('new-message', message);
    }
    public connectToChatroom(roomObject){

        this.socket.emit('create',roomObject);
    }

    public getMessages = () => {
        return Observable.create((observer) => {
            this.socket.on('new-message', (message) => {
                console.log('reached get messages observable app chat service');

                observer.next(message);
            });


        });
    }

}

, когда я пытаюсь отключиться вручную, успешно вызывается функция «при отключении», и я вижу, что «достигнуто при отключении» функция 'в консоли, как и ожидалось. Но это утверждение: this.socket.socket.connect();

вызывает эту ошибку в браузере:

ERROR TypeError: Cannot read property 'socket' of undefined

, и я не могу понять, почему. Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 30 января 2020

Это потому, что вы используете ключевое слово function, это меняет контекст this, вместо этого используйте функцию стрелки:

this.socket.on('disconnect', () => {
    console.log('reached on disconnect function');
    this.socket.connect();
}); 

Вы также можете посмотреть опцию Manager из сокета. io, чтобы это автоматически переподключилось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...