socket.io – socket.on等待承诺

我有一个button,与服务器进行一些通信,以检查input的值(通过input框)是否已经存在。 代码如下:

$("#button").click(function () { var exists = false; var name = $("#name").val(); socket.emit("check", name); socket.on("checkReturn", function (data) { exists = data.result; }); if (exists) { console.log("exists") } else { if (name.length > 0) { socket.emit("create", name); } } }); }); 

问题是checkReturn调用是asynchronous的,因此代码继续执行而没有实际等待结果。 我如何确保checkReturn首先完成,然后才能执行其余的代码?

       

网上收集的解决方案 "socket.io – socket.on等待承诺"

除了另一个答案之外,还可以使用确认,在客户端和服务器之间传递callback。 那么你可以使用emit函数的callback函数:

 $("#button").click(function() { var exists = false; var name = $("#name").val(); socket.emit('check', name, function (data) { exists = data.result; if (exists) console.log("exists"); else (if (name.length > 0) socket.emit("create", name)); }); }); 

在服务器端,它看起来像这样:

 io.sockets.on('connection', function (socket) { socket.on('ferret', function(name, fn) { // find if "name" exists fn({ exists: false }); }); }); 
 $("#button").click(function () { var exists = false; var name = $("#name").val(); socket.emit("check", name); socket.on("checkReturn", function (data) { exists = data.result; if (exists) { console.log("exists") } else { if (name.length > 0) { socket.emit("create", name); } } }); });