我希望这是一个简单的问题。回调的最佳做法是哪种?
选项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 。
提前致谢。
答案 0 :(得分:6)
我会做Node内置API函数所做的事情。
一个微不足道的实验告诉我:
open
成功通过null
err
。
open
在失败时传递null
数据参数。
其他几点:
您的代码始终构建一个Error
对象,即使工作正常。我不会这样做,这是没有意义的。
您的代码返回调用回调的结果。这很不寻常。
据我所知,您的代码正在同步调用回调。 (例如,在调用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);
}