我需要帮助,使我的JavaScript异步,因为我从节点的数据库查询。我使用node.js和socket.io。如果我使用setTimeout()函数,代码将起作用,但我想让代码更可靠,所以我试图实现回调。但是,我不知道如何在回调函数中正确使用“socket.on()”。我认为问题是我嵌套socket.on调用和第二个“socket.on()”调用不执行。任何帮助将不胜感激,谢谢。异步socket.io javascript回调不起作用
/*server side*/
socket.emit(variable1);//not important
socket.emit(variable2);//not important
//code above isn't important, I just wanted to show how data is used from my queries
/*client side*/
var socket = io.connect('123.456.789.123:3000');
var data = " ";//data I need to pass around
socket1(data, function(){
socket2(data)
});
function socket1(data, callback) {
socket.on('variable1', function (data) {
console.log("1");
callback();
}, callback)
}
function socket2(data) {
console.log("2");
socket.on('variable2', function (data) {
console.log("3");
})
}
的输出为“12” 和应为“123”
嘿,感谢您的深入解释!我的服务器代码只能发出一次,因为它在从数据库中进行查询之后就这样做了。我按照指定的方式实现了我的代码,并且输出正在打印,但方法以错误的顺序打印出来(2,1)。有没有办法确保registerVariable1()在调用registerVariable2()之前执行并完全结束?这就是我想要实现的,也许服务器端是问题,但我不能多次查询,因此每个处理程序只能有一组数据发射。希望这是有道理的。再次感谢! – 2014-08-31 01:47:07
这听起来像你的问题不是服务器端,它是客户端。这听起来像是当你发布数据库时你有所有数据,所以你可以在JSON对象中发射它,然后分别处理这些数据,不是吗? – jmort253 2014-08-31 01:48:41
换句话说,'socket.emit({varOne:dataForVar1Here,varTwo:dataForVar2Here});'一次发送所有数据,就是我所说的...... – jmort253 2014-08-31 01:49:26