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 获取、清空input type="file"的值(示例代码)
Dec 24 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
Jan 07 Javascript
在javascript中如何得到中英文混合字符串的长度
Jan 17 Javascript
Jquery搜索父元素操作方法
Feb 10 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
Aug 03 Javascript
浅谈Javascript中substr和substring的区别
Sep 30 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
Jan 18 Javascript
用js屏蔽被http劫持的浮动广告实现方法
Aug 10 Javascript
Vue 中批量下载文件并打包的示例代码
Nov 20 Javascript
如何制作一个Node命令行图像识别工具
Dec 12 Javascript
vue实现行列转换的一种方法
Aug 06 Javascript
JS实现商品橱窗特效
Jan 09 Javascript
一起来看看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 fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
python中time tzset()函数实例用法
2021/02/18 Python
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
化工专业推荐信范文
2013/11/28 职场文书
给面试官的感谢信
2014/02/01 职场文书
商务英语专业毕业生求职信
2014/07/06 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
2014年环保局工作总结
2014/12/11 职场文书
sql中mod()函数取余数的用法
2021/05/29 SQL Server
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
Windows server 2016服务器基本设置
2022/08/14 Servers