繁体   English   中英

如何让 javascript 等待我的变量获取数据,然后显示数据。 我正在使用 socket.io

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM