javascript - 在从异步函数内部调用函数时,是否有任何理由更喜欢 node.js 中函数的异步版本?

标签 javascript node.js asynchronous

主要看 FS api,对于大多数功能,似乎有三种风格可供选择:

  1. 同步
  2. 异步使用回调
  3. 异步使用 promise

异步是使用系统资源的最佳方式,但是,如果我已经在异步函数中并且无论如何都在等待每个调用,那么这与仅使用同步调用之间应该没有任何区别,对吗?对我来说,它就像一个内置的 await 语句。

虽然我不知道 async 在 js/node 中是如何实现的。如果我一开始就在异步函数中,那么使用异步函数有什么好处吗? (不包括我并行运行异步任务时的场景)

最佳答案

人们应该只根据函数内部发生的事情来决定使用 async 函数,而不是根据调用它的人。调用者不会影响函数是否应为 async

使函数异步的原因:

  1. 函数内部有基于 promise 的异步操作,您希望使用 await
  2. 函数内部有基于 promise 的异步操作,并且您希望利用在调用异步操作之前可能发生的同步异常的自动捕获(并转换为被拒绝的 promise)。

而且,这就是在函数前面使用 async 关键字的原因。

async 函数不是的东西(或对 async 函数的常见误解):

  1. 它不会神奇地使阻塞代码变成非阻塞代码。
  2. 它不会让调用者运行得更快。
  3. 它不会让同步代码现在在后台异步运行。

Async is the superior way to use system resources,

不确定你的意思。异步函数允许您以非阻塞方式运行操作,以便 Javascript 中的主线程可以在异步操作运行时做其他事情,但这不是 async 函数所支持的。这是通过异步操作实现的。两者不同。

if I'm already inside an async function and am awaiting every call anyway then there shouldn't be any difference between that and just using synchronous calls, right?

不正确。将 await 与返回 promise 的函数一起使用确实会暂停当前函数的执行(立即返回 promise),但这允许主 Javascript 线程做其他事情,服务其他请求等......使用同步代码会阻塞并且不允许主线程做其他事情,从而破坏服务器的可伸缩性。

To me it just seems like a built in await statement.

阻塞的同步代码会影响操作期间可能运行的所有其他内容。它与使用 await 不同。

关于javascript - 在从异步函数内部调用函数时,是否有任何理由更喜欢 node.js 中函数的异步版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60329167/

相关文章:

programming-languages - 基于事件 == 异步?

node.js - 在 Node.js 中管理嵌套异步 foreach 循环

javascript - Ajax 数据未到达后端 C# 代码

javascript - 如果声明为对象的一部分,VideoJS 将不会启动视频

javascript - polymer 适合纸质对话框显示在抽屉顶部

node.js - NPM 安装在 Docker 容器内失败,但在带有企业代理的主机上运行

javascript - FF5+ 中的 window.opener.focus() 问题

javascript - 循环另一个文件中的字符串的最佳方法?

java - 是否有可能在具有 Completable future 的 Java 中为 IO 密集型服务获得高吞吐量(4-5 TPS),或者 NodeJs 是更好的选择

node.js - libuv 在内部使用阻塞文件系统调用——为什么?如何?