博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
async和await详解
阅读量:6150 次
发布时间:2019-06-21

本文共 1514 字,大约阅读时间需要 5 分钟。

async 和 await语法糖详解

async用于声明一个function是异步的,不管function是普通函数还是异步函数,通过async修饰之后,返回的都是一个promise对象;而 await 用于等待一个异步方法执行完成。
await只能出现在async函数中或者 let value = await promise这种在环境的顶层作用域中使用,比如在window作用顶层函数中可以使用;但是await可以用来修饰任何函数,通过await修饰的任何函数,表示等待该行数执行之后再往后执行,表明是一个同步的过程。

async用法:

async函数(包含函数语句、函数表达式、Lambda表达式)会返回一个Promise对象,如果在asyn声明的一个函数中直接return 一个直接量,async 会把这个直接量通过Promise.resolve()封装成 Promise 对象。

//async 用来修饰一个返回Promise对象的函数async function myPromise(){  return new Promise((res,rej)=>{    //console.log(1);    res()  })}//async 用来修饰一个普通函数async function normalFunc(){  return "normal function"}var pro=myPromise();var nor=normalFunc()复制代码

await用法:如下图,如果await调用不是在异步函数作用就会出错

1、await用在async函数中
2、await用在顶层函数中

function getSomething() {    return "something";}function testPromise() {    return Promise.resolve("hello Promise");}async function testAsync() {    return "hello async";}async function testNormal() {    const v1 = await getSomething();  //await用来修饰一个普通函数    const v2 = await testPromise();  //await用来修饰一个返回promise对象的函数    const v3 = await testAsync(); //await用来修饰一个通过async构成的异步函数    //上面的await这种写法等价于下面这种promise的写法   console.log(getSomething())     let vv=testPromise().then(res=>{            console.log(res)            testAsync().then(res=>{              console.log(res)            })         })    console.log(v1,v2,v3);}testNormal()复制代码
async和await的优点用于处理Promise的.then处理,之前我们想在异步函数中达到同步的想过,所以异步执行之后的要执行的代码都会放在Promise的then方法中执行,达到同步的效果,但是async和await的出现,让js中的异步函数可以按顺序写代码的方式,达到代码顺序执行的效果。

如有什么描述不合理之处,欢迎指出

转载地址:http://vlzfa.baihongyu.com/

你可能感兴趣的文章
Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块
查看>>
Silverlight 如何手动打包xap
查看>>
建筑电气暖通给排水协作流程
查看>>
JavaScript面向对象编程深入分析(2)
查看>>
linux 编码转换
查看>>
POJ-2287 Tian Ji -- The Horse Racing 贪心规则在动态规划中的应用 Or 纯贪心
查看>>
Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月7日-1月14日)
查看>>
关于C#导出 文本文件
查看>>
使用native 查询时,对特殊字符的处理。
查看>>
maclean liu的oracle学习经历--长篇连载
查看>>
ECSHOP调用指定分类的文章列表
查看>>
分享:动态库的链接和链接选项-L,-rpath-link,-rpath
查看>>
Javascript一些小细节
查看>>
禁用ViewState
查看>>
Android图片压缩(质量压缩和尺寸压缩)
查看>>
nilfs (a continuent snapshot file system) used with PostgreSQL
查看>>
【SICP练习】150 练习4.6
查看>>
HTTP缓存应用
查看>>
KubeEdge向左,K3S向右
查看>>
DTCC2013:基于网络监听数据库安全审计
查看>>