NodeJS中没有提供回调模式

时间:2014-07-11 09:15:49

标签: javascript node.js asynchronous express callback

我经常写几个小时的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()并且它不存在时,让它崩溃。
  3. 也许第三个选项(我更喜欢)是最好的选择:如果没有提供回调,则抛出自定义错误,作为foo()的第一行。例如:

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

    if ( callback ) {
       callback();
    }
    

或单行:

callback && callback();