为啥使用同步功能 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的主要内容,如果未能解决你的问题,请参考以下文章

Node.js简介

关于Node.js

Node.js 简介与安装

Node.js 入门

Node.js

导语3——node以及npm