前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >什么是Async await,和Promise有什么区别

什么是Async await,和Promise有什么区别

作者头像
子夜星辰
发布于 2022-11-15 08:24:01
发布于 2022-11-15 08:24:01
1.5K00
代码可运行
举报
文章被收录于专栏:李白偷偷偷猪李白偷偷偷猪
运行总次数:0
代码可运行

前两篇文章给大家介绍了Promise和如何实现一个简单的Promise,那么什么是Async await呢,他们又有什么关系呢

Async/await:是一个用同步思维解决异步问题的方案

  1. 会自动将常规函数转换成Promise,返回值也是一个Promise对象
  2. 只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数
  3. 异步函数内部可以使用await
  4. await 放置在Promise调用之前,await 强制后面点代码等待,直到Promise对象resolve,得到resolve的值作为await表达式的运算结果
  5. await只能在async函数内部使用,用在普通函数里就会报错

和Promise相比较 相同点

为了解决异步流程问题,promise是约定,而async更优雅

区别

  1. Promise是ES6,而async是ES7
  2. Promise原来有规范的意义,Promise a,b,c,d 等规范,最终确定的是Promise a+ 规范
  3. Promise链式操作,自己catch异常。async则要在函数内catch,好在现在catch成本较低
  4. Promise有很多并行神器,比如Promise.all\Promise.race等。这些是async没法搞定的
  5. Promise是显式的异步,而 Async/await 让你的代码看起来是同步的,你依然需要注意异步
  6. Promise即使不支持es6,你依然可以用promise的库或polyfil,而async就很难做,当然也不是不能,成本会高很多
  7. async functions 和Array.forEach等结合,很多tc39提案都在路上或者已经实现,处于上升期,而promise也就那样了

总结:Async/awati 简单好用,是大势,肯定得学,而async的使用绕不开Promise,所以Promise是必会的。

下面的例子简单介绍一下Async/await 使用方法;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        function a() { 
            return new Promise((resolve, reject) => {
                setTimeout(() => { console.log('a执行'); resolve(3) }, 3000)
            });
        }

        function b() {
            return new Promise((resolve, reject) => {
                setTimeout(() => { console.log('b执行'); resolve(20) }, 2000)
            });
        }

        async function doIt() {
            try {  // async方法会吞掉所有报错信息,如果此例子中b()返回的是reject,不使用try...catch的话,无法获取到错误信息
                const res1 = await a();
                const res2 = await b();      //  这样的写法是不是很符合同步思维呢
                console.log(res1 + res2);
            } catch (err) {
                console.log(err)
            }

        }
        
		// Promise  方法调用 
		
        // function doIt() {
        //     a().then(res1 => {
        //         return b().then(res2 => {
        //             console.log(res1 + res2)
        //         })
        //     }).catch(err => {
        //         console.log(err)
        //     })
        // }

        doIt();  // a执行  b执行  23
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
工良出品 | 长文讲解 MCP 和案例实战
示例项目地址:https://github.com/whuanle/mcpdemo
痴者工良
2025/04/22
5260
工良出品 | 长文讲解 MCP 和案例实战
大语言模型的 FunctionCall 操作解析:原理、场景与实践
笔者是在体验字节跳动旗下的 Coze 智能体编程时,遇到的这个 FunctionCall 概念,于是花时间学习了一下,写了一篇文章分享给大家。
编程小妖女
2025/04/03
2980
大语言模型的 FunctionCall 操作解析:原理、场景与实践
.NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)
  关于数据一致性的文章,园子里已经有很多了,如果你还不了解,那么可以通过以下的几篇文章去快速地了解了解,有个感性认识即可。
Edison Zhou
2018/08/21
1.6K0
.NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)
开源一款功能强大的 .NET 消息队列通讯模型框架 Maomi.MQ
Maomi.MQ.RabbitMQ 是一个用于专为 RabbitMQ 设计的发布者和消费者通讯模型,大大简化了发布和消息的代码,并提供一系列简便和实用的功能,开发者可以通过框架提供的消费模型实现高性能消费、事件编排,框架还支持发布者确认机制、自定义重试机制、补偿机制、死信队列、延迟队列、连接通道复用等一系列的便利功能。开发者可以把更多的精力放到业务逻辑中,通过 Maomi.MQ.RabbitMQ 框架简化跨进程消息通讯模式,使得跨进程消息传递更加简单和可靠。
痴者工良
2024/06/14
4050
开源一款功能强大的 .NET 消息队列通讯模型框架 Maomi.MQ
OpenAI | Function calling 上手体验
LLM的基本使用方式是 text in -> text out , 输出是 text 。 但是很多时候,我们希望它能以固定的格式输出,以便解析成结构化的数据,传递给后续的处理逻辑。
windealli
2023/11/22
2.9K1
Maomi.MQ 2.0 | 功能强大的 .NET 消息队列通讯模型框架
在本篇教程中,将介绍 Maomi.MQ.RabbitMQ 的使用方法,以便读者能够快速了解该框架的使用方式和特点。
痴者工良
2025/03/26
1130
Maomi.MQ 2.0 | 功能强大的 .NET 消息队列通讯模型框架
【愚公系列】2023年02月 .NET CORE工具案例-ChatGPT和.NET Core应用的结合
自美国时间12月2日上线以来,美国硅谷的初创公司OpenAI推出的ChatGPT,已经拥有超过一百万的用户,受到热烈的讨论。它既能完成包括写代码,修bug(代码改错),翻译文献,写小说,写商业文案,创作菜谱,做作业,评价作业等一系列常见文字输出型任务,而且在和用户对话时,能记住对话的上下文,反应非常逼真。
愚公搬代码
2023/03/16
8292
【愚公系列】2023年02月 .NET CORE工具案例-ChatGPT和.NET Core应用的结合
AI驱动的安全扫描工具:HackBot
本文章或工具仅供安全研究使用,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,极致攻防实验室及文章作者不为此承担任何责任。
极致攻防实验室
2023/07/01
3650
AI驱动的安全扫描工具:HackBot
ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力
OpenAI在6月13号升级了ChatGPT,推出了类似其网页版插件的功能——函数调用(Function calling),13号当天我在很多微信公众号就看到了这个消息,甚至有人将函数调用称为杀手级特性,正好周末有空,就写个Demo试用下,验证下它是平平无奇还是真的能让人眼前一亮。
xindoo
2023/06/17
1.9K0
ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力
使用 C#、OpenAI 和 Spectre.Console 创建控制台 ChatGPT 客户端
本文将指导您使用 C# 和 .NET 8 构建基于控制台的 ChatGPT 客户端。
郑子铭
2024/11/23
2790
使用 C#、OpenAI 和 Spectre.Console 创建控制台 ChatGPT 客户端
OpenAI 重磅更新,支持自定义函数调用!
OpenAI API 现在支持函数调用了,但仅限于 gpt-4-0613 和 gpt-3.5-turbo-0613 模型,其实就是支持插件了!应用场景:
程序员树先生
2023/06/14
9650
OpenAI 重磅更新,支持自定义函数调用!
C#中关于Task.Yeild()的探究
在与同事讨论async/await内部实现的时候,突然想到Task.Yeild()这个函数,为什么呢,了解一点C#async/await内部机制的都知道,在await一个异步任务(函数)的时候,它会先判断该Task是否已经完成,如果已经完成,则继续执行下去,不会返回到调用方,原因是尽量避免线程切换,因为await后面部分的代码很可能是另一个不同的线程执行,而Task.Yeild()则可以强制回到调用方,或者说主动让出执行权,给其他Task执行的机会,可以把Task理解为协程,Task.Yeild()和Thr
Jlion
2022/04/07
3700
C#中关于Task.Yeild()的探究
.NET开发的Minimal Web Api交互模块
今天给大家推荐一个.NET开发的REPR(Request-Endpoint-Response)轮子Biwen.QuickApi。Biwen.QuickApi提供一种简单集成的Minimal Web Api交互模块 遵循了 REPR 设计。
郑子铭
2023/10/13
2600
.NET开发的Minimal Web Api交互模块
深入解析 Spring AI 系列:解析函数调用
我们之前讨论并实践过通过常规的函数调用来实现 AI Agent 的设计和实现。但是,有一个关键点我之前并没有详细讲解。今天我们就来讨论一下,如何让大模型只决定是否调用某个函数,但是Spring AI 不会在内部处理函数调用,而是将其代理到客户端。然后,客户端负责处理函数调用,将其分派到相应的函数并返回结果。
努力的小雨
2025/01/12
3310
用Blazor和DeepSeek API创建聊天应用
本文将指导您如何使用Blazor框架和DeepSeek API构建一个简单的聊天应用。Blazor是一个用于构建交互式Web UI的框架,它允许开发者使用C#编写前端代码。DeepSeek API则提供强大的自然语言处理能力,使得应用程序能够理解和生成人类语言。
郑子铭
2025/03/21
1190
用Blazor和DeepSeek API创建聊天应用
【橙子老哥】C# RabbitMQ-RPC/发布确认/延迟队列(二)
我们在上一期,实操了前5个模式,因为篇幅有限,以及前5种模式用的比较多,还剩下RPC和发布者确认留在下一期讲
郑子铭
2024/12/30
1110
【橙子老哥】C# RabbitMQ-RPC/发布确认/延迟队列(二)
OpenAI发布大杀器功能,无数AI创业公司的方案推倒重来
OpenAI近期发布了一项重大更新,这次的更新内容不禁让人瞠目结舌,具体更新内容可以看昨天的文章:OpenAI凌晨大更新,价格最高降75%、API函数调用上线、上下文长度提高4倍!今天主要详细讲一下聊天API中新增的函数调用功能,为应用层应用的开发所带来的巨大的影响。
make a bug
2023/07/15
3130
OpenAI发布大杀器功能,无数AI创业公司的方案推倒重来
C# 一分钟浅谈:GraphQL 客户端调用
随着互联网应用的发展,API 的设计模式也在不断进化。从传统的 RESTful API 到现代的 GraphQL API,后者以其灵活性和高效性逐渐受到开发者的青睐。本文将简要介绍如何在 C# 中调用 GraphQL API,并探讨一些常见的问题、易错点及如何避免这些问题。
Jimaks
2024/12/03
1590
C# 一分钟浅谈:GraphQL 客户端调用
26K Star!LLM多智能体AutoGen教程5:函数调用之避免捏造参数
书接上回《26K Star!LLM多智能体AutoGen教程3:我的外包弟弟写代码》,我们使用AutoGen编写一个自动完成代码编写和修改的案例。然而大语言模型生成的代码具有随机性,尤其是比较复杂的功能,或者是非Python类的其他编程的语言时候,尤其是C++,基本上是乱写一通,各种幻觉API。简单的任务已经交给外包小弟了,稍微复杂的功能,还得是我们自己来写。此时,我们就需要LLM的function calling功能。在进入AutoGen的函数调用功能讲解之前,我们先尝试如何使用OpenAI API进行Function calling。
AgenticAI
2025/03/18
920
26K Star!LLM多智能体AutoGen教程5:函数调用之避免捏造参数
万字长文学会对接 AI 模型:Semantic Kernel 和 Kernel Memory,工良出品,超简单的教程
很多人想学习 AI,但是不知道怎么入门。笔者开始也是,先是学习了 Python,然后是 Tensorflow ,还准备看一堆深度学习的书。但是逐渐发现,这些知识太深奥了,无法在短时间内学会。此外还有另一个问题,学这些对自己有什么帮助?虽然学习这些技术是很 NB,但是对自己作用有多大?自己到底需要学什么?
痴者工良
2024/03/02
1.2K0
万字长文学会对接 AI 模型:Semantic Kernel 和 Kernel Memory,工良出品,超简单的教程
推荐阅读
相关推荐
工良出品 | 长文讲解 MCP 和案例实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档