首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在从异步函数内部调用函数时,有什么理由更喜欢node.js中函数的异步版本吗?

在从异步函数内部调用函数时,有什么理由更喜欢node.js中函数的异步版本吗?
EN

Stack Overflow用户
提问于 2020-02-20 22:00:15
回答 2查看 332关注 0票数 2

主要关注FS,对于大多数函数,似乎有三种风格可供选择:

  1. 同步
  2. 异步使用回调
  3. 异步使用承诺

异步是使用系统资源的更好的方式,但是,如果我已经在异步函数中,并且无论如何都在等待每个调用,那么这和仅仅使用同步调用没有任何区别,对吗?在我看来,这只是一个内置的等待声明。

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

EN

回答 2

Stack Overflow用户

发布于 2020-02-20 22:21:41

我们应该决定只根据函数内部发生的事情来使用async函数,而不是由谁调用它。调用方不影响函数是否应该是async

创建函数async的原因

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

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

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

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

异步是使用系统资源的最佳方式,

不知道你在说什么。异步函数允许您以非阻塞的方式运行操作,这样Javascript中的主线程可以在异步操作运行时执行其他操作,但这不是async函数能够实现的。这是由异步操作启用的。这两者是不同的。

如果我已经在一个异步函数中,并且无论如何都在等待每个调用,那么这和仅仅使用同步调用没有任何区别,对吗?

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

在我看来,这只是一个内置的等待声明。

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

票数 5
EN

Stack Overflow用户

发布于 2020-02-20 22:09:03

async/await并不等同于同步执行;使使用承诺更容易的语法选择(实际上,这些关键字的目标是从编程的角度更接近于编写同步代码,因此更直观地使用)。

async将一个任务放在事件循环上,该任务将在堆栈完成所有同步执行挂起后执行。这样做的好处是显而易见的:进程可以在等待资源可用时工作(例如,打开一个文件需要系统调用,所以让它成为一个非阻塞操作是有意义的)。

如果您已经在异步函数中,异步操作的优点和缺点与其他任何地方都是一样的。实际上,await只能在async函数中使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60329167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档