Javascript的promise,async和await的区别详解


Posted in Javascript onMarch 24, 2022

终于把promise, async, await的区别和联系弄清楚了,看下面代码

写法1,2是promise的写法

写法6是async和await的写法

主要看第2种写法和第6中写法即可, 第2种写法是promise的典型写法,第6中写法是async, await的典型写法

// 以下三个请求依次执行
req1 = () => { return fetch("http://example.com/api/v1/get")}
req2 = () => { return fetch("http://example.com/api/v1/post")}
req3 = () => { return fetch("http://example.com/api/v1/delete")}
//写法1
req1().then(res=>{
    console.log("1: ",res)
    req2().then(res =>{
        console.log("2: ",res)
        req3().then(res =>{
            console.log("3: ",res)
        })
    })
})

// 写法2
req1().then(res =>{
    console.log("1: ", res)
    return req2()
})
.then(res =>{
    console.log("2: ", res)
    return req3()
})
.then(res =>{
    console.log("3: ", res)
})
// 写法3
function f1(){
    req1()
    req2()
    req3()
}
// 写法4
async  function f2(){
    await req1
    await req2
    await req3
}
// 写法5
async  function f3(){
    req1().then(res => {
        console.log("1:", res)
    })
    await f3_1()
}
async function f3_1(){
    req1().then(res => {
        console.log("2:", res)
    })
    await f3_2()
}
async function f3_2(){
    req2().then(res=>{
         console.log("3: ",res)
    })
}
// 写法6
ff()
async function ff(){
    await req1_good()
}
async function req1_good(){
    fetch("http://example.com/api/v1/get").then(res =>{
        console.log("1: ",res)
    })
    await req2_good()
}
async  function req2_good() {
    fetch("http://example.com/api/v1/post").then(res =>{
        console.log("2: ",res)
    })
    await req3_good()
}
async function req3_good() {
     fetch("http://example.com/api/v1/delete").then(res => {
         console.log("3: ",res)
     })
}
  • 最外层的async函数调用之后立即返回了,但是async还是里面还是在逐层执行
  • await的作用是等待其修饰的函数内部的所有await函数都执行完毕,
  • 从最外层启动一个async函数相当于go一个协程,await func 也相当于go 一个协程,不同在于await = go + waitgroup
  • await比promise高明的地方在于,promise在then里面调用另一个promise时,不得不return另一个promise再then, 或者在then中回调,但是await完全不需要
  • async是为了异步,await是为了异步+阻塞,缺一不可

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!   

Javascript 相关文章推荐
JS判断元素为数字的奇异写法分享
Aug 01 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
Aug 02 Javascript
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
jquery+json实现动态商品内容展示的方法
Jan 14 Javascript
Node.js Addons翻译(C/C++扩展)
Jun 12 Javascript
Ionic默认的Tabs模板使用实例
Aug 29 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 Javascript
ReactJS实现表单的单选多选和反选的示例
Oct 13 Javascript
详解vue-router 命名路由和命名视图
Jun 01 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
Sep 17 Javascript
Vue实现图片与文字混输效果
Dec 04 Javascript
vue+openlayers绘制省市边界线
Dec 24 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 #Vue.js
手写Spirit防抖函数underscore和节流函数lodash
Mar 22 #Javascript
深入讲解Vue中父子组件通信与事件触发
Mar 22 #Vue.js
关于Vue中的options选项
Mar 22 #Vue.js
vue+echarts实现多条折线图
vue使用echarts实现折线图
浅谈Vue的computed计算属性
You might like
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
利用python实现命令行有道词典的方法示例
2017/01/31 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
Python3实现转换Image图片格式
2018/06/21 Python
OpenCV 边缘检测
2019/07/10 Python
python with语句的原理与用法详解
2020/03/30 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
先进党支部申报材料
2014/12/24 职场文书
2015年七七事变78周年纪念活动方案
2015/05/06 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
话题作文之自信作文
2019/11/15 职场文书