我需要一些插座的帮助。io和bacon.JS:
客户端有一个套接字。IO发出事件,向服务器发送2个参数,如下所示:
$("#btn").asEventStream("click").onValue(function(){
socket.emit("event", param1, param2);
});
然后在服务器端,我需要接收这两个参数,以便我可以用它们做事情。
按照这个答案的例子,我试着这样做:
io.on('connection', function (socket) {
socket.on('error', function (err) {
console.log(err);
});
Bacon.fromEvent(socket, "event", param1, param2)
.filter(function(param1, param2){ return true })
.forEach(function(param1, param2){
doStuff(param1, param2);
});
});
但是没有成功。
总之,我需要在服务器上接收事件作为EventStream,并使用参数。
有人能帮我吗?
我解决了!
原来是使用bacon.js +套接字发送对象。io组合。
发出套接字时。使用对象作为参数的io事件,您可以在事件流中捕获该事件,该流中的每个事件实际上都是您作为参数发送的对象。
我所做的是:
//client side
$("#btn").asEventStream("click").onValue(function(){
var obj = {p1: param1, p2: 'param2'};
socket.emit("someEvent", obj);
});
//server side
Bacon.fromEvent(socket, "someEvent")
.onValue(function(data){
doStuff(data.p1, data.p2);
});
或者您也可以对该对象执行一些操作,并返回一个带有结果的套接字事件,如下所示:
//server side
//doStuff can return anything, it doesn't have to be an object
function doStuff(data){if data.p2 === 'param2' {return true}};
Bacon.fromEvent(socket, "someEvent")
.map(function (data) { return doStuff(data) })
.onValue(socket, "emit", "returnEvent");
,然后你可以在客户端捕获返回的事件,并且这个结果EventStream上的每个事件将是"doStuff"函数的返回:
//client side
Bacon.fromEvent(socket, "returnEvent")
.onValue(function(data){
console.log(data);
});