如何将socket emit命令作为同步函数?

时间:2017-08-01 06:15:34

标签: javascript node.js

在此代码中,程序通过使用Node.js从Linux服务器获取正常运行时间详细信息。

socket.emit("getuptime",{host:"192.168.*.*"});
$("#result").html("loading....");
socket.on("getuptimeresult",function(data){
   console.log("result = "+data);
});

这里,第二行代码应该只执行完全完成的第一行代码。我不确定何时从节点获得结果。所以我想在socket发出代码后立即得到它。有可能吗?

1 个答案:

答案 0 :(得分:0)

你的意思是这样的:

let data = {host:"192.168.*.*"};
socket.emit("getuptime", data);
console.log(data);

如果您想在发光后立即使用数据,那么就是这样做的。如果您有其他意思,请更新您的问题。

<强>更新

如果您想要getuptimeresult中的数据,则必须使用该事件名称&amp;此外,您必须先注册该事件的回调,然后才能发出该事件的数据。如下所示:

socket.on('getuptimeresult', function(data) {console.log(data);});
socket.emit('getuptimeresult', {host:"192.168.*.*"});

更新2:

根据您更新的相关代码, 我想,从客户端(浏览器),您使用getuptime事件&amp;在getuptimeresult事件中获得结果。如果是的话,

客户端/浏览器:

socket.emit("getuptime",{host:"192.168.*.*"});
$("#result").html("loading....");
socket.on("getuptimeresult",function(data){
  var html = convertDataToHTML(data); // you have to change this function for your case.
  $("#result").html(html);
});

服务器:

socket.on("getuptime",function(data){
  var detail = getUptimeDetailsForHost(data); // you have to change this function for your case.
  socket.emit('getuptimeresult', details);
});

PS:

如果您使用的是socket.io,则无需getuptimeresult事件&amp;你可以使用回调。例如:

客户端/浏览器:

$("#result").html("loading....");
socket.emit("getuptime", {host:"192.168.*.*"}, function(data){
  var html = convertDataToHTML(data); // you have to change this function for your case.
  $("#result").html(html);
});

服务器:

socket.on("getuptime", function(data, callback){ // <-- notice callback parameter here.
  var detail = getUptimeDetailsForHost(data); // you have to change this function for your case.
  callback(details);
});