Javascript access' handle'对于socket.io' s .on()中的第一个参数?

时间:2016-08-18 09:13:03

标签: javascript socket.io

尝试构建某种智能解析器'对于socket.on('message', function(data) {}),我可以做一个'切换/案例'在第一个参数上。是否有一些该参数的全局句柄,以便像下面这样的东西工作?

socket.on(socket.token.name, function(data) {
  switch (socket.token.name) {
    case "table:dashboard":
      // do something with data
      break;
    case "table:monitor":
      // do something with data
      break;
   }
});

有什么想法吗?我已经仔细阅读了socket.io文档,但还没有找到 的任何提示。或者其他一些方向来实现相同的想法?

1 个答案:

答案 0 :(得分:0)

将整个事物包装在一个闭包中。

function getHandler(name) {
  return function(data) {
    switch (name) {
      case "table:dashboard":
        // do something with data
        break;
      case "table:monitor":
        // do something with data
        break;
     }
  }
}

socket.on("foo", getHandler("foo"));
socket.on("bar", getHandler("bar"));

更优化的是,您将返回一次不同的函数,而不是每次都运行switch-case。

function getHandler(name) {
  switch (name) {
    case "table:dashboard":
      return function(data) {}
      break;
    case "table:monitor":
      return function(data) {}
      break;
   }
}

或者,只需将第二个参数绑定到您的处理程序:

socket.on("table:dashboard", handler.bind(handler, "table:dashboard"))

function handler(name, data) {
  switch (name) {
    case "table:dashboard":
      // do something with data
      break;
    case "table:monitor":
      // do something with data
      break;
   }
});