一些库公开了两种本质上做同样事情的方法,但其中一个在异步上下文中运行,另一个在同步上下文中运行。
一些例子是:
unlink
来自fs/promises
和unlinkSync
来自fs
; compare
、compareSync
、hash
和 hashSync
来自 bcrypt。
他们为什么选择这样做?根据我的应用程序的上下文,使用同步或异步有什么优点和缺点吗?
使用同步或异步有什么优点和缺点,具体取决于 我的申请背景?
当然。同步操作会阻止事件循环,这意味着在发生这种情况时没有其他代码可以运行。假设您有一些昂贵的哈希操作(一个有很多轮的操作)并且您使用
hashSync
。
这将在计算哈希时阻止事件循环,并且在使用 Node.js 运行 Web 服务器的情况下,这意味着在此期间发送到服务器的任何请求都将被延迟,直到该操作完成。这就是为什么您将
await
与哈希一起使用,这样您就可以告诉 node.js 不要阻塞事件循环,并在哈希操作完成后运行其后的代码。