NodeJS回调和返回语句

时间:2018-02-22 09:59:18

标签: node.js function asynchronous callback return

我正在编写基于NodeJS的服务器端应用程序。 应用程序在某些TCP和UDP端口上侦听传入消息,当消息到达时,它们将被解析,相关数据将存储到MySQL数据库中。整个工作正常,NodeJS处理并行并发请求的能力令人惊叹。 然而,阅读有关NodeJS危险的反馈,我发现了一些让我感到困惑的问题:问题是关于回调。 想象一下下面的代码:

function ParseMessage(payload,callback_ko,callback_ok) {
  // here we evaluate the parsed_message content, err is set if parsing errors occurs
  ....
  if(!err) {
    // if there are no errors invoke the callback_ok to let the flow continue passing the parsed content
    if(typeof callback_ok == 'function') {
      callback_ok(parsed_message);
      }
  else {
    // if error occurs invoke the callback_ko passing the payload to let the flow continue in another path, maybe attempt another parsing
    if(typeof callback_ko =='function') {
      callback_ko(payload);
      }
    }
  return;   // <---- Ensure the functions ends
  }

放置代码if(typeof callback == 'function')是为了避免调用传递给 ParseMessage 函数的参数不是函数(在这种情况下是 ParseMessage < / em>只需退出返回任何结果)。 我怀疑是return;声明: 我知道返回语句必须始终存在(如果我错了,请纠正我),以便允许异步功能正常结束。由于我们在这里没有返回任何内容(我们在此处调用回调),我们根本就没有返回任何内容,但我不知道返回语句的位置是否为正确对象,真爱。换句话说,我应该将return语句放在函数的末尾,还是应该有这样的东西,而不是:

function ParseMessage(payload,callback_ko,callback_ok) {
  // here we evaluate the parsed_message content, err is set if parsing errors occurs
  ....
  if(!err) {
    // if there are no errors invoke the callback_ok to let the flow continue passing the parsed content
    if(typeof callback_ok == 'function') {
      callback_ok(parsed_message);
      }
    return;   // <---- Ensure the functions ends
  else {
    // if error occurs invoke the callback_ko passing the payload to let the flow continue in another path, maybe attempt another parsing
    if(typeof callback_ko =='function') {
      callback_ko(payload);
      }
    return;   // <---- Ensure the functions ends
    }
  }

我发现有人还建议写return callback(payload);之类的东西。什么是最正确的策略?

0 个答案:

没有答案