JavaScript WebSocket заменяет ссылку на новый сокет - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь автоматически подключить веб-сокет к функции.Я хочу, чтобы оно сохраняло то же имя переменной, но у меня возникли некоторые проблемы.вот функция, которую я использую

function reconnect(obj){
    try{
        obj=new WebSocket(obj.url);
        }
     except{
        setTimeout(reconnect,5000,obj);
    }
}

mysocket=new Websocket(myurl);
mysocket.close()
reconnect(mysocket)

После успешного выполнения функции повторного подключения, но mysocket все еще ссылается на старую закрытую Websocket.Я не уверен, как передать новый Websocket объект в старую переменную.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Вы переопределяете переменную. Есть несколько способов сделать это, самый быстрый - передать объект.

function reconnect(obj){
    var mySocket = obj.mySocket;
    try {
        obj.mySocket=new WebSocket(mySocket.url);
    }
    except {
        setTimeout(reconnect, 5000, obj);
    }
}

mysocket=new Websocket(myurl);
mysocket.close()
var wrapperObject = {mysocket};
reconnect(wrapperObject);
// At any point of time `wrapperObject.mysocket` will have the latest socket instance

Более понятный подход - определить оболочку class/function, которая скрытно определяет переменную mySocket. Пример:

function ReconnectSocket (mySocket) {
    this.mySocket = mySocket
}

ReconnectSocket.prototype.reconnect = function () {
    try {
        this.mySocket = new WebSocket(this.mySocket.url);
    }
    except {
        setTimeout(reconnect, 5000);
    }
}

ReconnectSocket.prototype.getSocket = function () {
    return this.mySocket
}

var mysocket=new Websocket(myurl);
mysocket.close()
var reconnectSocket = new ReconnectSocket(mysocket).reconnect()
// `reconnectSocket.getSocket()` will give the latest instance at any point of time
0 голосов
/ 17 апреля 2019

Первый подход - использование глобальной переменной

    function reconnect(){
        try{
            mysocket=new WebSocket(mysocket.url);
            }
         except{
            setTimeout(reconnect,5000);
        }
    }

    mysocket=new Websocket(myurl);
    mysocket.close()
    reconnect()

Второй подход, я думаю, вы должны обернуть сокет в объект

    function reconnect(obj){
        try{
            obj.mysocket=new WebSocket(obj.mysocket.url);
            }
         except{
            setTimeout(reconnect,5000,obj);
        }
    }

    var socketObject = {};
    socketObject.mysocket=new Websocket(myurl);
    socketObject.mysocket.close()
    reconnect(socketObject)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...