我试图提示用户在客户端输入,然后检查输入在服务器上是否有效。如果输入无效,客户端应重新提示,直到收到有效输入。 只有输入有效后才可以进行其他操作。
客户端.js
while(looping){
temp_name = prompt(usr + err_msg + pmsg, "");
socket.emit("is_valid", temp_name, (response) => {
looping = !response.status
err_msg = response.message
});
}
服务器.js
// check if username is valid
socket.on("is_valid", (temp_name, callback) => {
// init
let msg = "";
let stat = false;
// (check if valid)
// return
stat = (msg == "")
response = {
status: stat,
message: msg,
}
callback(response);
});
如果我删除 client.js 中的 while 循环,我的代码就可以工作。 但如果我添加 while 循环,则没有任何效果。也没有打印日志语句。
之所以存在 while 循环,是因为我想在输入无效时再次提示用户。
为什么会出现这种情况?
谢谢你。
我希望它返回 temp_name 是否有效。
如果有效,则looping = false,并且应该退出while循环。 如果无效,则looping = true,并且会再次提示用户。目前,无论输入什么内容,它都会重复提示用户。但如果我删除 while 循环,它就会正常工作并返回我期望的值。
修好了。解决方案是使用promise(在客户端,使用socket.emitWithAck而不是socket.emit)
https://socket.io/docs/v4/tutorial/api-overview#with-a-promise
否则一切都是异步的,当您检查它时,响应将为空。
谢谢你