Node.js:为什么要 return 在错误处理期间回调的结果?
Node.js: Why should you return the result of a callback during error handling?
这里是 Node.js 的新手。我正在通过 NodeSchool.io 上的教程学习 Node.js,在我们学习模块的一个教程中,我们被要求编写如下代码:
// Some code...
function filteredLs(dir, ext, callback) {
fs.readdir(dir, function(err, files) {
if (err)
return callback(err); // return statement necessary here...
callback(null, withExtension(files, ext)); // ...but not here
})
}
module.exports = filteredLs;
我的问题是,在这样的示例中,为什么在处理错误时必须包含 return
语句,但在它为 null 时可以省略?无论如何,我看不出函数的 return 值对 readdir
有什么用,因为它发生在它完成工作之后。为什么会有所不同?
调用回调函数时使用 return
通常是为了防止 运行 之后的代码。返回的 值 通常是无关紧要的。
这就是错误情况下需要它的原因,因此 non-error 情况下的 callback
调用也不会被调用。
在 non-error 的情况下不需要它,因为它已经是函数的最后一行。
您发布的错误处理样板文件确实令人困惑。它使用 maximally-terse 表达代码的方式,但确实令人困惑,而且 return 值被丢弃是正确的。因此,为了清楚起见,我首选的样板是
if (error) {
callback(error)
return
}
我觉得稍微清晰一点,简化的简洁对我来说不是那么重要(我反正是用宏打的)。
我发现这可以更清楚地表明这里表达了两种不同的意图:
- 将错误反馈给调用者
- 退出该功能,因为没有其他有用的事情要做。没有 return 值,因为回调协议不需要,调用代码不需要,甚至可能不会将 return 值捕获到变量中。
这里是 Node.js 的新手。我正在通过 NodeSchool.io 上的教程学习 Node.js,在我们学习模块的一个教程中,我们被要求编写如下代码:
// Some code...
function filteredLs(dir, ext, callback) {
fs.readdir(dir, function(err, files) {
if (err)
return callback(err); // return statement necessary here...
callback(null, withExtension(files, ext)); // ...but not here
})
}
module.exports = filteredLs;
我的问题是,在这样的示例中,为什么在处理错误时必须包含 return
语句,但在它为 null 时可以省略?无论如何,我看不出函数的 return 值对 readdir
有什么用,因为它发生在它完成工作之后。为什么会有所不同?
调用回调函数时使用 return
通常是为了防止 运行 之后的代码。返回的 值 通常是无关紧要的。
这就是错误情况下需要它的原因,因此 non-error 情况下的 callback
调用也不会被调用。
在 non-error 的情况下不需要它,因为它已经是函数的最后一行。
您发布的错误处理样板文件确实令人困惑。它使用 maximally-terse 表达代码的方式,但确实令人困惑,而且 return 值被丢弃是正确的。因此,为了清楚起见,我首选的样板是
if (error) {
callback(error)
return
}
我觉得稍微清晰一点,简化的简洁对我来说不是那么重要(我反正是用宏打的)。
我发现这可以更清楚地表明这里表达了两种不同的意图:
- 将错误反馈给调用者
- 退出该功能,因为没有其他有用的事情要做。没有 return 值,因为回调协议不需要,调用代码不需要,甚至可能不会将 return 值捕获到变量中。