gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:06:54 27 4
gpt4 key购买 nike

主要看 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com