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

 更新时间:2022年03月23日 16:33:37   作者:河流儿  
这篇文章主要为大家详细介绍了Javascript的promise,async和await的区别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

终于把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 模拟坦克大战游戏(html5版)附源码下载

    javascript 模拟坦克大战游戏(html5版)附源码下载

    这篇文章主要介绍了javascript 模拟坦克大战游戏关键点和遇到的问题及实现代码,需要的朋友可以参考下
    2014-04-04
  • 微信小程序多表联合查询的实现详解

    微信小程序多表联合查询的实现详解

    小程序设计中,通常会根据业务来做多表的拆分,多表拆分一般是根据业务的特点进行拆分。比如我们在文章关注的业务中,会将文章和关注信息拆分成一对多的表关系。初学者可能对一对一、一对多、多对多的设计概念不是特别清楚
    2022-08-08
  • JS闭包经典实例详解

    JS闭包经典实例详解

    这篇文章主要介绍了JS闭包,结合一个经典实例较为详细的分析了javascript闭包的原理及使用方法,需要的朋友可以参考下
    2018-12-12
  • Websocket通信协议在数字孪生中的应用

    Websocket通信协议在数字孪生中的应用

    这篇文章主要为大家介绍了Websocket通信协议在数字孪生中的应用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • JavaScript闭包原理及作用详解

    JavaScript闭包原理及作用详解

    闭包是指内部函数总是可以访问其所在的外部函数中声明的变量和参数,即使在其外部函数被返回(寿命终结)了之后。这篇文章将为大家详细介绍一下闭包的原理,作用及用途,快来跟随小编一起学习一下吧
    2021-12-12
  • 原生JS实现pc端轮播图效果

    原生JS实现pc端轮播图效果

    这篇文章主要为大家详细介绍了原生JS实现pc端轮播图效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • js change,propertychange,input事件小议

    js change,propertychange,input事件小议

    github上关于mootools一个issue的讨论很有意思,所以就想测试记录下。感兴趣的可以点击原页面看看
    2011-12-12
  • 一步步教你使用JavaScript打造一个扫雷游戏

    一步步教你使用JavaScript打造一个扫雷游戏

    javascript作为前端常用的开发语言,越来越多的人都在学习它,下面这篇文章主要给大家介绍了关于如何使用JavaScript打造一个扫雷游戏的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • 小程序卡片切换效果组件wxCardSwiper的实现

    小程序卡片切换效果组件wxCardSwiper的实现

    这篇文章主要介绍了小程序卡片切换效果组件wxCardSwiper的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】

    CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】

    这篇文章主要介绍了CKEditor 4.4.1 添加代码高亮显示插件功能,涉及ckeditor使用官方推荐Code Snippet插件的相关操作布局与使用注意事项,需要的朋友可以参考下
    2019-06-06

最新评论