Javascript 检查/等待接收WebSocket中的消息
我试图创建一个脚本,等待布尔变量变为true,并将文本记录到控制台。以下代码将等待s1,然后在变量为true时向控制台打印消息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
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,以便您可以轻松地将这些未连接的事件耦合起来。