async/await 的理解和用法

async/await 的理解和用法async/await是什么async/await是ES7提出的基于Promise的解决异步的最终方案。asyncasync是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。因此对async函数可以直接then,返回值就是then方法传入的函数。//async基础语法asyncfunctionfun0(){console.log(1);return1;}fun0().then(val=>{conso

大家好,又见面了,我是你们的朋友全栈君。

async/await是什么

async/await 是ES7提出的基于Promise的解决异步的最终方案。

async

async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。因此对async函数可以直接then,返回值就是then方法传入的函数。

// async基础语法
async function fun0(){ 
   
    console.log(1);
    return 1;
}
fun0().then(val=>{ 
   
    console.log(val) // 1,1
})

async function fun1(){ 
   
    console.log('Promise');
    return new Promise(function(resolve,reject){ 
   
        resolve('Promise')
    })
}
fun1().then(val => { 
   
    console.log(val); // Promise Promise
})

await

await 也是一个修饰符,只能放在async定义的函数内。可以理解为等待

await 修饰的如果是Promise对象:可以获取Promise中返回的内容(resolve或reject的参数),且取到值后语句才会往下执行;

如果不是Promise对象:把这个非promise的东西当做await表达式的结果。

async function fun(){ 
   
    let a = await 1;
    let b = await new Promise((resolve,reject)=>{ 
   
        setTimeout(function(){ 
   
            resolve('setTimeout')
        },3000)
    })
    let c = await function(){ 
   
        return 'function'
    }()
    console.log(a,b,c)
}
fun(); // 3秒后输出: 1 "setTimeout" "function"
function log(time){ 
   
    setTimeout(function(){ 
   
        console.log(time);
        return 1;
    },time)
}
async function fun(){ 
   
    let a = await log(1000);
    let b = await log(3000);
    let c = log(2000);
    console.log(a);
    console.log(1)
}
fun(); 
// 立即输出 undefined 1
// 1秒后输出 1000
// 2秒后输出 2000
// 3秒后输出 3000

async/await 的正确用法

// 使用async/await获取成功的结果

// 定义一个异步函数,3秒后才能获取到值(类似操作数据库)
function getSomeThing(){ 
   
    return new Promise((resolve,reject)=>{ 
   
        setTimeout(()=>{ 
   
            resolve('获取成功')
        },3000)
    })
}

async function test(){ 
   
    let a = await getSomeThing();
    console.log(a)
}
test(); // 3秒后输出:获取成功
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158149.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 虎年港股并购开门红 多牛集团3亿并购九尊数字互娱「建议收藏」

    虎年港股并购开门红 多牛集团3亿并购九尊数字互娱「建议收藏」2月8日消息,九尊数字互娱(股票代码:01961.HK)发布联合公告称,公司已经接到价值3亿元港币的收购要约。这也是2022年开年不到一个月以来,继Zynga、动视暴雪之后全球游戏业又一起重大并购。九尊数字互娱集团控股有限公司是一家在香港主板上市的移动互联网泛娱乐内容提供商,主营业务包括手机游戏的研发和运营,数字媒体如电子杂志、漫画、音乐等的分发和营销。2020年公司收入为1.7亿元人民币。根据公告显示,九尊数字互娱五名股东以3亿港币的估值,向InfinitiesGlobalTechnology

    2022年6月9日
    28
  • 客户端是移动端吗_谈单的技巧

    客户端是移动端吗_谈单的技巧1、百度开放平台选择开发者服务申请应用2、zai

    2022年10月8日
    0
  • 带你了解软件系统架构的演变

    带你了解软件系统架构的演变一个成熟的系统,并不是一开始就做到方方面面都完美,也不会去考虑什么高并发,高可用问题,但随着时间的推移,现有架构的问题就会慢慢的显现。比如用户激增,访问量不断增大,在这过程中,会不断的出现新的问题,而为了解决这些问题,软件技术架构都会发生重大变化,而针对不同业务特征的系统会有各自的侧重点,像淘宝这类网站要解决的事海量商品搜索下单支付等问题。像腾讯要解决数亿级别用户的实施消息传输等。每种业务都有自己不同的系统架构。以JavaWeb为例搭建简单的电商系统这个电商系统有多个业务模块,假设现在有:.

    2022年6月17日
    22
  • Docker卸载_docker创建容器

    Docker卸载_docker创建容器Linux服务器Docker卸载某个镜像:首先输入命令dockerimages查看当前docker下有多少镜像:1[root@iZwz9a191mdam4di3dozk3Z~]#dockerimages2REPOSITORYTAGIMAGEIDCREATEDSIZE3mysql…

    2022年9月8日
    0
  • tar 打包压缩命令

    tar 打包压缩命令tar命令用于文件的打包或压缩,是最为常用的打包压缩命令,其语法格式如下:tar[选项]文件名.tar.gz源文件tar-cvfzxxx.tar.gzsource_file(tar-cvfz包名.tar.gz源文件)#以tar.gz方式打包并gz方式压缩tar-xvfzxxx.tar.gz-Cpath(tar-xvfzxxx.tar.gz-C目标路径)#解压缩包注意:使用tar命令,打包仅仅是打包xxx.tar,打包

    2022年5月31日
    77
  • HTML5标准简介

    最近前端的群都蛮热闹的,但我发现多数讨论的是javascript和css相关的问题,仿佛大家在努力创建各种交互、样式的时候,忘却了这一切的基础–HTML。其实我很喜欢HTML,觉得这个语言远比XM

    2021年12月20日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号