如何使用 baconJS 接收从 socket.io emit 事件发送的参数?
How to receive parameters sent from a socket.io emit event using baconJS?
我在 socket.io 和 bacon.JS 方面需要一些帮助:
我在客户端有一个 socket.IO 发出事件,它向服务器发送 2 个参数,如下所示:
$("#btn").asEventStream("click").onValue(function(){
socket.emit("event", param1, param2);
});
然后在服务器端我需要接收这 2 个参数,这样我就可以用它们做一些事情。
按照 上的示例,我尝试这样做:
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 + socket.io 组合发送 对象 。
当您使用对象作为参数发出 socket.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");
然后您可以在客户端捕获 returning 事件,并且此结果 EventStream 上的每个事件都将是 "doStuff" 函数的 return:
//client side
Bacon.fromEvent(socket, "returnEvent")
.onValue(function(data){
console.log(data);
});
我在 socket.io 和 bacon.JS 方面需要一些帮助:
我在客户端有一个 socket.IO 发出事件,它向服务器发送 2 个参数,如下所示:
$("#btn").asEventStream("click").onValue(function(){
socket.emit("event", param1, param2);
});
然后在服务器端我需要接收这 2 个参数,这样我就可以用它们做一些事情。
按照
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 + socket.io 组合发送 对象 。
当您使用对象作为参数发出 socket.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");
然后您可以在客户端捕获 returning 事件,并且此结果 EventStream 上的每个事件都将是 "doStuff" 函数的 return:
//client side
Bacon.fromEvent(socket, "returnEvent")
.onValue(function(data){
console.log(data);
});