Javascript 从setInterval启动对象?

Javascript 从setInterval启动对象?,javascript,sockjs,Javascript,Sockjs,我为Sockjs提供了以下重新连接方法,该方法几乎完全有效: (function() { // Initialize the socket & handlers var connectToServer = function() { var warbleSocket = new SockJS('http://url.com:5555/warble'); warbleSocket.onopen = function() { clearInterval(c

我为Sockjs提供了以下重新连接方法,该方法几乎完全有效:

(function() {
  // Initialize the socket & handlers
  var connectToServer = function() {
    var warbleSocket = new SockJS('http://url.com:5555/warble');

    warbleSocket.onopen = function() {
      clearInterval(connectRetry);
      $('.connect-status')
        .removeClass('disconnected')
        .addClass('connected')
        .text('Connected');
    };

    warbleSocket.onmessage = function(e) {
      $('#warble-msg').text(e.data);
    };

    warbleSocket.onclose = function() {
      clearInterval(connectRetry);
      connectRetry = setInterval(connectToServer, 1000);
      $('.connect-status')
        .removeClass('connected')
        .addClass('disconnected')
        .text('Disconnected');
    };

    // Connect the text field to the socket
    $('.msg-sender').off('input').on('input', function() {
      warbleSocket.send($('.msg-sender input').val()); 
    });

    function send(a) {
        warbleSocket.send(a);    
    }

    return {
        send: send
    };
  }();
  var connectRetry = setInterval(connectToServer, 1000);
})();
我得到的错误是当它试图重新连接。 错误是:

SyntaxError: missing ] after element list
在这一行:

connectRetry = setInterval(connectToServer, 1000);

你知道我做错了什么吗?

你的
connectToServer
变量不是一个函数,它是一个带有属性
send
的对象,这是一个函数,所以说
setInterval(connectToServer,1000)
没有意义。请尝试以下方法:

setInterval(connectToServer.send, 1000);

你为什么不把事情简化一点呢

我会将连接内容放在特定函数中,并从setInterval()调用它

类似这样的内容(请小心使用,因为我没有测试此代码,好吗?):

我希望它能帮助你

问候,


Heleno

此错误是由此代码之外的内容引起的。这里既没有元素列表,也没有开头的
[
。为什么在
var connectRetry=setInterval(connectToServer,1000);
之前有
();
。不确定这是否是问题的原因。应该是
};
@Rajesh没有
}();
我将无法使用
connectToServer.send(“你好”)
连接服务器之外
实际上,如果我删除
()
并执行
};
它会工作,但随后
连接服务器。发送(“Hello”)
停止工作。
连接重试=设置间隔(连接服务器,1000)
onclose
中,是要重新运行connectToServer,因此它试图重新连接我的脚本。这会破坏我脚本的逻辑OK,但是你明白我的基本观点吗?
connectToServer
不是一个函数,所以你不能将它传递给
setInterval()
。您需要重新构造脚本。是的,我理解,但不确定如何:/
(function() {
  // Initialize the socket & handlers
  var connectToServer = function() {
    var warbleSocket;

    function connect() { 
      warbleSocket = new SockJS('http://url.com:5555/warble');

      warbleSocket.onopen = function() {
        // ...
      };

      warbleSocket.onmessage = function(e) {
        // ... 
      };

      warbleSocket.onclose = function() {
        // ...
    }

    // Connect the text field to the socket
    $('.msg-sender').off('input').on('input', function() {
      warbleSocket.send($('.msg-sender input').val()); 
    });

    function send(a) {
        warbleSocket.send(a);    
    }

    return {
        send: send
    };
  }();

  // you probably will need to call the first connection
  connectToServer();

  // and than set connection retry
  var connectRetry = setInterval(connectToServer.connect, 1000);
})();