[英]JavaScript event not triggered (sync connection with websockets)
我正在使用websockets開發應用程序。 我有一個事件,它在收到消息時被調用,但是如果發生循環則不會觸發。 我正在嘗試做的是一個同步連接(僅對於這一部分,這就是為什么我使用websockets的原因)。 我的想法是等到收到消息即是我所期望的,然后繼續程序流程。
var connection = new WebSocket('ws://' + location.hostname + ':8888/')
var msgAck=false; //Flag that comes true when received data
connection.onmessage = function (event){
check(event.data);
}
function check(msg){
if(msg == "ok")msgAck=true;
}
function requestOk(){
connection.send("somecmd");
}
//Normal program flow
requestOk();//Server will return "ok"
while(!msgAck);//Wait server response
onmessage
事件從未觸發,因此程序被卡在那里。
您不能使用while循環來等待異步響應,而必須使用基於事件的體系結構。 如果您需要等待特定的消息,則應包括該消息的唯一標識符。
var connection = new WebSocket('ws://' + location.hostname + ':8888/')
connection.onmessage = function (event){
check(event.data);
}
function check(msg){
if(msg == "ok"){
// msgAck Function
foo(); // call a function here instead of using a while loop
}
}
function requestOk(){
connection.send("somecmd");
}
//Normal program flow
requestOk(); //Server will return "ok"
我提到了回調和Promise,因為通常您可以將事件重寫為面向回調/承諾的流程。
function requestOk(cb){
var connection = new WebSocket('ws://' + location.hostname + ':8888/')
var check = function(msg){
if(msg == "ok"){
// msgAck Function
cb(null,msg)
}else{
cb("Message not okay.")
}
}
connection.onmessage = function (event){
check(event.data);
}
connection.send("somecmd");
}
//Normal program flow, callback style
requestOk(function(err,data){
if(err){
// Error message
}else{
// OK msg
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.