为啥使用同步功能 node.js
Posted
技术标签:
【中文标题】为啥使用同步功能 node.js【英文标题】:why use sync functions node.js为什么使用同步功能 node.js 【发布时间】:2016-02-11 17:52:59 【问题描述】:每个人都建议在 Node.js 中使用异步(非阻塞)函数而不是同步函数。
如果不推荐使用 node.js 中的同步函数有什么用呢?
例如:如果fs.readFile()
可以在不阻塞的情况下完成相同的工作,为什么还要使用fs.readFileSync()
?
【问题讨论】:
***.com/questions/16336367/… 不是不推荐,只是一个用例 可能是***.com/questions/31863621/…的副本 【参考方案1】:同步函数很有用,尤其是在启动时,您想确保在执行更多代码之前获得结果。
例如,您可以同步加载配置文件。但是,如果您尝试在实时请求期间执行文件读取,则应使用异步函数,以免阻止其他用户请求。
【讨论】:
好的.....所以据我了解,同步功能不仅会阻止该用户,还会阻止其他用户。那么单个阻塞函数就可以阻止整个服务器在这段时间内服务请求? 没错。 Node 是单线程的,所以当一件事正在发生时,其他任何事情都不会发生。使用异步函数让进程执行其他操作,然后在完成后返回。 当您使用这些配置的所有代码可能都是异步时,需要同步什么样的配置? 例如,您可能想要加载配置文件以获取运行服务器的端口。你会在同步调用中得到它,因为在你的服务器启动之前你不会做任何并发工作。【参考方案2】:有时您希望在完成对文件的读取或写入后执行代码。例如
function ()
array.forEach(function(data)
fs.writeFile(data)
);
// do this after forEach has finished looping, not after files have finished being writen to
相对于:
function ()
array.forEach(function(data)
fs.writeFileSync(data)
);
// do this after all files have been written to
【讨论】:
这是一个幼稚的论点。检查异步模块或任何承诺实现 你可能仍然想在此使用 Promise以上是关于为啥使用同步功能 node.js的主要内容,如果未能解决你的问题,请参考以下文章