代码之家  ›  专栏  ›  技术社区  ›  James Ko

节点。js:为什么要在错误处理期间返回回调的结果?

  •  1
  • James Ko  · 技术社区  · 10 年前

    新手到节点。js。我正在学习Node。js的教程 NodeSchool.io ,在我们学习模块的一个教程中,我们被要求编写如下代码:

    // 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 语句,但当它为空时可以省略吗?我不知道函数的返回值有什么用处 readdir 无论如何,因为它是在完成工作之后发生的。为什么会有不同?

    2 回复  |  直到 10 年前
        1
  •  1
  •   JohnnyHK    10 年前

    使用 return 当调用回调函数时,通常会阻止后面的代码运行。返回的 价值 通常是不相关的。

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

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

        2
  •  0
  •   Peter Lyons    10 年前

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

    if (error) {
      callback(error)
      return
    }
    

    我觉得这一点稍微清晰一些,简明扼要的内容对我来说并不重要(我用宏的方式键入)。

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

    1. 用气泡将错误返回给调用者
    2. 退出函数,因为没有其他有用的事情要做。没有返回值,因为回调协议不需要返回值,并且调用代码不需要,甚至可能不会将返回值捕获到变量中。
    推荐文章