我一直在阅读示例应用程序尝试学习节点。我注意到有几个人在boot()上加载模型和控制器时使用了readdirSync方法。
例如:
var models_path = __dirname + '/app/models'
var model_files = fs.readdirSync(models_path)
model_files.forEach(function(file){
if (file == 'user.js')
User = require(models_path+'/'+file)
else
require(models_path+'/'+file)
})
这对我来说似乎是反节点。这与节点偏爱的“try-to-make-everything-async”相反。
何时以及为什么这样的同步文件读取是个好主意?
答案 0 :(得分:3)
更有可能的是,使初始化更简单 - 当速度的异步性无关紧要时;我们不会尝试为许多并发请求提供服务。
同样,如果您需要访问一些在启动时初始化的变量,它将用于应用程序的生命周期,您不希望将整个应用程序包装回调中! / p>
答案 1 :(得分:0)
当您必须确保在继续之前所有数据都可用时,需要同步读取 并且您需要按顺序保留序列。换句话说,如果您需要阻止进程并且无法执行任何其他操作(对于任何人),例如当您启动服务器时(例如,读取HTTPS的证书文件)。
在其他时间,同步读取可能是理想的,以保持编码更简单,如Len建议的那样。但是,正如你的建议,你正在以简洁的方式处理性能问题。事实上,在这种情况下,最好使用众多测序助手库中的一个。这些通过处理嵌套回调和序列问题大大简化了代码。
当然,您提供的代码作为示例是相当危险的 - 如果读取失败会发生什么?
以下是3个库:
此链接也可能有用:The Tale of Harry - 解释神话程序员如何从传统编程转移到基于回调的&他最终使用的模式。也是对异步库中呈现的模式的有用见解。