Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查/等待接收WebSocket中的消息_Javascript_Jquery_Multithreading_Websocket_Wait - Fatal编程技术网

Javascript 检查/等待接收WebSocket中的消息

Javascript 检查/等待接收WebSocket中的消息,javascript,jquery,multithreading,websocket,wait,Javascript,Jquery,Multithreading,Websocket,Wait,我试图创建一个脚本,等待布尔变量变为true,并将文本记录到控制台。以下代码将等待s1,然后在变量为true时向控制台打印消息 while(s1 === false) {} console.log("s1"); s1变量是使用websocket的onmessage设置的。下面的代码将设置变量并初始化websocket // initializing the websocket conn = {}, window.WebSocket = window.WebSocket || window.Mo

我试图创建一个脚本,等待布尔变量变为true,并将文本记录到控制台。以下代码将等待s1,然后在变量为true时向控制台打印消息

while(s1 === false) {}
console.log("s1");
s1变量是使用websocket的onmessage设置的。下面的代码将设置变量并初始化websocket

// initializing the websocket
conn = {}, window.WebSocket = window.WebSocket || window.MozWebSocket;
openConnection();
s1 = false;

function openConnection() {

// uses global 'conn' object
if (conn.readyState === undefined || conn.readyState > 1) {
    conn = new WebSocket('ws://localhost:8100');

    conn.onmessage = function (event) {
        if (event.data == "S1")
            s1 = true;
        else if (event.data == "S2")
            s2 = true;
        else if (event.data == "S3")
            s3 = true;

        console.log(s1 + " " + s2 + " " + s3);
        };

    }
}
}
代码应该工作得很好,但由于javascript是一种单线程语言,因此变量s1永远不会更新。直到while循环完成

我尝试过使用workers,但我需要更改DOM并访问全局变量,这是workers的一个限制。此外,在这个脚本中,时间安排非常重要

我想知道是否有一种方法可以让我检查是否有任何消息排队等待onmessage接收并等待它们被接收?或者,我可以在执行循环时对任何排队的任务进行全面检查吗


谢谢:

永远不要用while。当它从onmessage事件内部更改时,您不能执行您需要的操作吗?查看EventEmitter,以便您可以轻松地将这些未连接的事件耦合起来。