![](/img/trans.png)
[英]How can I wait for a socket.io connection to return data using casperJS?
[英]How can i make javascript wait for my variable to get data, then display data. I'm using socket.io
我在这里使用 socket.io。 因为我是从外部 API 获取数据,我的用户名没有时间获取,所以第一次提交消息时,用户名没有出现,但第二次出现,因为 API 被获取。 PS:我无法在前端获取API。 我必须制作一个服务器才能使用它。 这是代码:
var socket = io("ws://localhost:4000/");
document.getElementById("message").addEventListener("keydown", (e) => {
if (e.keyCode == 13) {
e.preventDefault();
document.getElementById("sendbtn").click();
}
});
var send = () => {
socket.emit("message", document.getElementById("message").value);
socket.emit("username", document.getElementById("username").value);
document.getElementById("message").value = " ";
return false;
};
socket.on("user", (user) => {
username = user;
});
var username = " ";
var message = " ";
socket.on("message", (msg) => {
message = msg;
document.getElementById("messages").innerText = username + message;
console.log(username);
});
您可以禁用发送,直到用户名出现。
请注意我如何将 username 的默认值更改为空字符串。
var send = () => {
if (username) {
socket.emit("message", document.getElementById("message").value);
socket.emit("username", document.getElementById("username").value);
document.getElementById("message").value = " ";
}
return false;
};
socket.on("user", (user) => {
username = user;
});
var username = "";
var message = "";
在服务器端使用 promise 来异步/等待来自 API 调用的响应以发出“消息”和“用户名”(再次来自服务器)。
您可以向服务器发送任何您想要的消息。 然后,服务器将进行适当的 API 调用——该 API 调用应该返回一个承诺。
因此,将在服务器上发出“消息”或“用户名”的函数应该是一个调用 API 函数的异步函数,如下所示:
//api.js
function getMyData(){
return new Promise((resolve, reject) =>{
fetch().success({resolve(data)}).fail({reject(error)})
})
}
//serverSocket.js
async function emitStuff(){
let result
try{
result = await getMyData;
socket.emit("message", result)
}catch(err){
//throw err
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.