如果没有错误,回调是否应该传递null或undefined?

时间:2015-08-19 15:18:02

标签: javascript node.js

我希望这是一个简单的问题。回调的最佳做法是哪种?

选项1:

function get (id, callback) {
    var topic = find(id);
    var err = new Error('Sorry, ' + id + ' is not a valid id.');
    err.status = 404;
    return (topic) ? callback(null, topic) : callback(err);
}

选项2:

function get (id, callback) {
    var topic = find(id);
    var err = new Error('Sorry, ' + id + ' is not a valid id.');
    err.status = 404;
    return (topic) ? callback(undefined, topic) : callback(err);
}

旁注,find()返回未定义,而不是 null

提前致谢。

3 个答案:

答案 0 :(得分:6)

我会做Node内置API函数所做的事情。

一个微不足道的实验告诉我:

  • open成功通过null err

  • open在失败时传递null数据参数。

其他几点:

  1. 您的代码始终构建一个Error对象,即使工作正常。我不会这样做,这是没有意义的。

  2. 您的代码返回调用回调的结果。这很不寻常。

  3. 据我所知,您的代码正在同步调用回调。 (例如,在调用get时,回调将在get返回之前发生。)通常,异步调用是异步调用。如果您正在同步处理,例如openSync等,请在名称上添加Sync并直接返回值,而不是调用回调。

答案 1 :(得分:1)

作为参数传递会停用默认参数值机制。如果回调函数具有默认参数值,并且您为空参数发送,则回调函数将使用 null ,不是参数的默认值。

function multiply(a=1, b=1){
  return a*b;
}

console.log(multiply(undefined, 2));
console.log(multiply(null, 2));

答案 2 :(得分:0)

约定为null,如下所示:https://docs.nodejitsu.com/articles/errors/what-are-the-error-conventions

作为@ T.J。克劳德在评论中说,如果不发回错误,不要构造错误。

function get (id, callback) {
    var topic = find(id);

    if (topic) {
        return callback(null, topic);
    }

    var err = new Error('Sorry, ' + id + ' is not a valid id.');
    err.status = 404;

    return callback(err);
}