【问题标题】:Callback not provided pattern in NodeJSNodeJS中未提供回调模式
【发布时间】:2014-09-01 20:52:31
【问题描述】:

我通常会写几个小时的 NodeJS 代码,并且有一个我不知道如何面对的常见情况。给定以下异步函数调用(我们忘记了所需的回调):

function foo (callback) {
    // Perform a task and call callback when finished
    callback();
}
foo(); // We forget the callback

处理这个问题的更好方法是什么?我找到了两个选择:

  1. foo() 函数添加为第一行,使其更加健壮:callback = callback || function () {}
  2. 让它在foo() 尝试调用callback() 而它不存在时崩溃。

也许第三种选择(我更喜欢)是最好的选择:如果未提供回调,则抛出自定义错误,如foo() 的第一行。例如:

function foo (callback) {
    if (!callback) {
        throw new Error('No callback provided');
    }
    // More stuff here
    callback();
}

我的问题是: 是否有任何众所周知的模式来解决这种情况?您认为哪种方法更好?您是否以其他方式解决此问题?

【问题讨论】:

  • 您是否尝试将Promises 用于异步功能?它带来了一些无需回调的设计新方法。

标签: javascript node.js asynchronous express callback


【解决方案1】:

这完全取决于您的回调是否是强制性的。

  • 如果是强制性的,那么您应该快速失败并执行throw new Error('No callback provided');

  • 如果它是可选的,那么标准做法是只要它存在就调用它。无需创建新函数,只需在要调用它的地方添加一个检查:

    if ( callback ) {
       callback();
    }
    

或单行:

callback && callback();

【讨论】:

  • typeof callback === "function" 在这里会更好吗?
  • @BenFortune 如果您有一个名为“回调”的变量,在语义上将其放置为类型函数,我宁愿调用它并且如果它不是函数则让代码失败。这样更容易知道回调中存储了错误。
猜你喜欢
  • 2019-09-06
  • 2011-12-09
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
相关资源
最近更新 更多