async/await是ES20717引入的,主要是简化Promise调用操作,实现了以异步操作像同步的方式去执行,async外部是异步执行的,同步是await的作用。
async,英文意思是异步,当函数(包括函数语句、函数表达式、Lambda表达式)前有async关键字的时候,并且该函数有返回值,函数执行成功,那么该函数就会调用Promise.resove()并隐式的返回一个Promise对象;如果函数执行失败就会调用Promise.reject()并返回一个Promise对象。
Promise.resolve(x) 可以看作是 new Promise(resolve => resolve(x)) ,可将字面量对象或其他对象快速封装成 Promise 实例
async func(){
return "a"
}
console.log(func())
func().then(res=>{
console.log(res) //通过回掉获取到 a
}.catch(err=>{ }))
func()的返回值如下,由此可见返回的是一个Promise对象。
![Promise {<fulfilled>: 'a'}
\[\[Prototype\]\]: Promise
\[\[PromiseState\]\]: "fulfilled"
\[\[PromiseResult\]\]: "a"](https://img-blog.csdnimg.cn/c5ea27825ade47d387bad4a519dd8865.png)
async function func(){
const a = await asyncFunc();
}
func().then().catch()
async function func(){
try(){
const a = await asyncFunc();
}catch(error){ }
}
async function func(){
console.log('a')
const c = await 'c'
console.log(c)
return 'd'
}
func().then(res=>console.log(res))
console.log('b')
输出:
先输出a后输出b,说明async函数执行后会立即返回,不阻塞线程。
文中提到了字面量,博文在这里做下介绍。
字面量又称之为直接量,代码中固定值的表示方法,程序中直接使用的数据,没进行过封装。可分为字符串字面量(string literal)、数组字面量(array literal)、对象字面量(object literal),函数字面量(function literal)。 ==<font color=red >一般除去函数表达式,在给变量赋值时,可以理解为=号右边的数据</font>== 。
var a = "1";
var b = [1];
var c = {};
var d =function (){} // function() 为匿名函数
注意:函数字面量一般为匿名函数,但是语法也支持定义函数名。
var d =function func(){}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。