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 相关文章推荐
初学prototype,发个JS接受URL参数的代码
Sep 25 Javascript
js的逻辑运算符 ||
May 31 Javascript
jQuery数组处理方法汇总
Jun 20 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
Dec 22 Javascript
Jquery弹出层插件ThickBox的使用方法
Dec 09 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
Oct 01 Javascript
JavaScript函数节流的两种写法
Apr 07 Javascript
bootstrap table支持高度百分比的实例代码
Feb 28 Javascript
JQuery元素快速查找与操作
Apr 22 jQuery
解决vue数组中对象属性变化页面不渲染问题
Aug 09 Javascript
koa socket即时通讯的示例代码
Sep 07 Javascript
使用JS获取页面上的所有标签
Oct 18 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 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
详解Angular的8个主要构造块
2017/06/20 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
python 文件与目录操作
2008/12/24 Python
使用Python的判断语句模拟三目运算
2015/04/24 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
python之列表推导式的用法
2019/11/29 Python
python 实现矩阵按对角线打印
2019/11/29 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
积极分子思想汇报
2014/01/04 职场文书
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
安全承诺书
2015/01/19 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
openstack中的rpc远程调用的方法
2021/07/09 Python