前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot与Vue交互解决跨域问题【亲测已解决】
最近在利用springboot+vue整合开发一个前后端分离的个人博客网站,所以这一篇总结一下在开发中遇到的一个问题,关于解决在使用vue和springboot在开发前后端分离的项目时,如何解决跨域问题。在这里分别分享两种方法,分别在前端vue中解决和在后台springboot中解决。
灰小猿
2021/12/17
2K0
SpringBoot与Vue交互解决跨域问题【亲测已解决】
springboot解决跨域问题
前端调用的后端接口不属于同一个域(域名或端口不同),就会产生跨域问题,也就是说你的应用访问了该应用域名或端口之外的域名或端口。
科技新语
2024/11/25
820
springboot解决跨域问题
SpringBoot解决前后端分离的跨域问题
第一种也是最简单但不常用的一种,只需要在后端接口方法上添加 @CrossOrigin 注解,即可解决对这个接口方法的请求跨域问题,但是在实际开发中一般都会有很多的方法,在每一个方法上都添加这个注解的话明显就会很影响使用感受。当然还可以将注解添加到类上,表示类中的所有方法都解决了跨域问题,但是类也不止一个还是麻烦。
高大北
2022/06/14
4150
uniapp跨域问题解决办法
GeekLiHua
2025/01/21
1480
uniapp跨域问题解决办法
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
跨域问题是浏览器为了保护用户的信息安全,实施了同源策略(Same-Origin Policy),即只允许页面请求同源(相同协议、域名和端口)的资源,当 JavaScript 发起的请求跨越了同源策略,即请求的目标与当前页面的域名、端口、协议不一致时,浏览器会阻止请求的发送或接收。
磊哥
2024/01/25
6.1K0
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
Spring Boot解决跨域问题的技术方案及代码示例
当前端应用(如SPA应用或移动Hybrid应用中的Web视图)通过JavaScript发起HTTP请求到与当前页面所在源不同的服务器时,就涉及到了跨域。例如,前端应用部署在 `http://app.example.com` ,但尝试访问位于 `http://api.example.net` 的API服务,由于协议、域名或端口至少有一项不同,浏览器会按照同源策略阻止这种跨域请求,除非服务器明确表明允许这样的跨域访问。
用户7353950
2024/05/20
3840
Spring Boot解决跨域问题的技术方案及代码示例
Java:前后端分离——跨域分析
跨域是指跨域名:域名,记忆网络电脑ip很难记,就给它取了一个名字来记忆,这个名字就要域名。
用户10356819
2023/02/17
7900
SpringBoot跨域配置
跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
小沐沐吖
2022/09/22
1.3K0
SpringBoot跨域配置
springboot和vue交互产生跨域问题的解决办法(后端解决方法)
hi,大家好,我是左手写helloworld,右手写bug的秋名山码民! 今天在利用springboot+vue整合开发一个网站的时候出现了bug,总结一下在开发中遇到的一个问题,关于解决在使用vue和springboot在开发前后端分离的项目时,如何解决跨域问题。
秋名山码神
2022/12/14
6020
springboot和vue交互产生跨域问题的解决办法(后端解决方法)
Spring Boot + Vue 跨域配置(CORS)问题解决历程
在使用 Spring Boot 和 Vue 开发前后端分离的项目时,跨域资源共享(CORS)问题是一个常见的挑战。接下来,我将分享我是如何一步步解决这个问题的,包括中间的一些试错过程,希望能够帮助到正在经历类似问题的你。
繁依Fanyi
2024/06/16
2.5K0
再一次折腾跨域问题
跨域问题在前后端分离的开发场景中经常遇到,回想起来自己也已经折腾了数次,本篇文章主要对跨域问题做个记录和总结。
云原生
2022/03/30
4790
SpringBoot 跨域配置
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148580.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/02
4310
SpringBoot 跨域问题:Access to XMLHttpRequest at ‘***‘ from origin ‘***‘ has been blocked by CORS policy
CORS 跨站点资源分享,属于跨域问题,同个 IP 的不同端口间的访问也属于跨域。
wsuo
2020/10/26
16.9K0
SpringBoot 跨域问题:Access to XMLHttpRequest at ‘***‘ from origin ‘***‘ has been blocked by CORS policy
CORS跨域问题及解决方案详解
CORS(Cross-Origin Resource Sharing,跨域资源共享)跨域问题源于浏览器的同源策略。同源策略是浏览器的一种安全机制,它要求浏览器在访问一个资源时,该资源的协议、域名和端口必须与当前页面的协议、域名和端口完全一致,否则就会被视为跨域请求,浏览器会对这类请求进行限制。
威哥爱编程
2025/02/25
3460
SpringBoot跨域配置「建议收藏」
简单而言,跨域请求就是当一台服务器资源从另一台服务器(不同 的域名或者端口)请求一个资源或者接口,就会发起一个跨域 HTTP 请求。举个简单的例子,从http://www.baidu.com,发送一个 Ajax 请求,请求地址是 http://www.taobao.com下面的一个接口,这就是发起了一个跨域请求,在不做任何处理的情况下,显然当前跨域请求是无法被成功请求,因为浏览器基于同源策略会对跨域请求做一定的限制。
全栈程序员站长
2022/09/13
8760
面试突击81:什么是跨域问题?如何解决?
跨域问题指的是不同站点之间,使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。 但这个保护机制也带来了新的问题,它的问题是给不同站点之间的正常调用,也带来的阻碍,那怎么解决这个问题呢?接下来我们一起来看。
磊哥
2022/09/27
3730
面试突击81:什么是跨域问题?如何解决?
SpringBoot执行跨域处理
首先了解一下一个http链接的的组成部分:http://www.huangfu.com:8080/hello.html
止术
2020/09/15
4600
vue前端怎么解决跨域问题_前端跨域调用js方法解决方案
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。
全栈程序员站长
2022/11/04
2.5K0
vue前端怎么解决跨域问题_前端跨域调用js方法解决方案
【Vue】集成HTTP库Axios
进入vue项目目录 npm install axios@0.21.0 --save
瑞新
2021/12/06
4800
【Vue】集成HTTP库Axios
5年经验程序员被问:前后端分离后,如何解决跨域问题?
做Web开发,经常会遇到跨域问题,小伙伴们在面试中,也经常被问到。这不,又有一位工作3年的小伙伴被问到这样一道题,说前后端分离后,如何解决跨域问题?
Tom弹架构
2023/09/07
2.1K0
5年经验程序员被问:前后端分离后,如何解决跨域问题?
相关推荐
SpringBoot与Vue交互解决跨域问题【亲测已解决】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档