Node.js:为什么要在错误处理期间返回回调的结果

Node.js: Why should you return the result of a callback during error handling?

本文关键字:返回 回调 结果 处理 错误 js 为什么 Node      更新时间:2023-09-26

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时可以省略它?无论如何,我看不出函数的返回值对readdir有什么用处,因为它发生在它完成工作之后。为什么会有不同?

在调用回调函数时使用return通常是为了防止后面的代码运行。返回的通常是不相关的。

这就是为什么在错误情况下需要它,所以不调用非错误情况的callback调用。

在无错误的情况下不需要它,因为它已经是函数的最后一行了。

您发布的错误处理样板确实令人困惑。它使用了一种最简洁的方式来表达代码,但确实令人困惑,而且返回值被丢弃是正确的。因此,为了清晰起见,我首选的样板是

if (error) {
  callback(error)
  return
}

我觉得这一点稍微清晰一些,简洁性的降低对我来说并不重要(我用宏观的方式打字)。

我发现这是为了更清楚地表明,这里表达了两个不同的意图:

  1. 将错误气泡返回给调用者
  2. 退出函数,因为没有其他有用的操作。没有返回值,因为回调协议不需要返回值,调用代码也不需要,甚至可能不会将返回值捕获到变量中