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
首先完成,然后才能执行其余的代码?
除了另一个答案之外,还可以使用确认,在客户端和服务器之间传递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); } } }); });