【问题标题】:Write a reusable logic in a socket data handler (Node.js)在套接字数据处理程序(Node.js)中编写可重用逻辑
【发布时间】:2021-01-29 04:10:06
【问题描述】:

我有多个传入的套接字数据处理程序。 它们都共享相同的初始验证检查和将缓冲区转换为数组的函数。此外,每次我需要遍历该数组的元素并执行特定的计算。但是,复制粘贴验证和数组生成代码看起来很奇怪。

// First handler
socket.on('data', (data) => {
  const tags = getTags(data);
  if (Array.isArray(tags)) {
    tags.forEach((tag) => { // Everything is the same until this point
      // Some computation
    });
  }
});

// ...
// Some other code
// ...

// Another handler
socket.on('data', (data) => {
  const tags = getTags(data);
  if (Array.isArray(tags)) {
    tags.forEach((tag) => { // Again the same code is duplicated up to this point
      // Some different computation here
    });
  }
});

我如何概括这种基于循环的验证和数组生成,并从中制作一个抽象且可重用的函数,这样我就不必复制和粘贴?

【问题讨论】:

    标签: javascript node.js sockets


    【解决方案1】:

    Javascript 允许您将函数作为参数传递。所以只要写一个全名函数:

    function myHandler (callback) {
      return function (data) {
        const tags = getTags(data);
        if (Array.isArray(tags)) {
          tags.forEach(callback);
        }
      }
    }
    

    现在你可以这样做了:

    // First handler
    socket.on('data', myHandler((tag) => {
        // do stuff
    }));
    
    // Another handler
    socket.on('data', myHandler((tag) => {
        // do stuff
    }));
    

    这里的关键是myHandler() 返回function (data) ...,这是socket.on() 所期望的。

    【讨论】:

      【解决方案2】:

      您可以编写一个按顺序运行所有回调的函数

      例如,您有一些必须在每个数据上运行的函数

      function isArray(data){
          return Array.isArray(data)
      }
      function foo(data){
      // some computation
      }
      

      然后你就有了一个按顺序运行所有这些的函数

      function runCallbacks(data,funcs){
         for(let i=0;i<funcs.length;i++){
            funcs[i](data)
         }
      }
      

      然后

      socket.on('data', runCallbacks(data,[isArray,foo]));
      

      【讨论】:

        猜你喜欢
        • 2018-07-20
        • 2012-12-18
        • 2014-03-18
        • 1970-01-01
        • 2021-07-21
        • 1970-01-01
        • 2013-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多