Вы не можете использовать цикл 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"
Я упоминаю обратные вызовы и обещания, потому что в общем случае вы можете переписать события в поток, ориентированный на обратный вызов / обещание.
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
}
});