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实现权限树的更新权限时的全选全消功能
Feb 17 Javascript
用JavaScript仿PS里的羽化效果代码
Dec 20 Javascript
JavaScript面向对象(极简主义法minimalist approach)
Jul 17 Javascript
node.js中的fs.chmodSync方法使用说明
Dec 18 Javascript
jQuery封装的tab选项卡插件分享
Jun 16 Javascript
Javascript中的Prototype到底是什么
Feb 16 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
Feb 10 Javascript
vue全局使用axios的方法实例详解
Nov 22 Javascript
Centos7 安装Node.js10以上版本的方法步骤
Oct 15 Javascript
js实现从右往左匀速显示图片(无缝轮播)
Jun 29 Javascript
微信小程序实现左滑删除效果
Nov 18 Javascript
微信小程序向Java后台传输参数的方法实现
Dec 10 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
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
php中stream(流)的用法
2014/03/25 PHP
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
python使用KNN算法识别手写数字
2019/04/25 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
用Python实现职工信息管理系统
2020/12/30 Python
创业计划书六个要素
2013/12/26 职场文书
红头文件任命书范本
2014/06/05 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
给老师的感谢信
2015/01/20 职场文书
财政局长个人总结
2015/03/04 职场文书
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS