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
}

我觉得稍微清晰一点,简化的简洁对我来说不是那么重要(我反正是用宏打的)。

我发现这可以更清楚地表明这里表达了两种不同的意图:

  1. 将错误反馈给调用者
  2. 退出该功能,因为没有其他有用的事情要做。没有 return 值,因为回调协议不需要,调用代码不需要,甚至可能不会将 return 值捕获到变量中。