Promise
在ES6中处理异步用Promise,在ES8中新增了Promise的语法糖async await来更优雅的处理异步
async await
async 可以单独存在
async funtion add(){
return 1
}
add()
// add 方法是可以正常执行的,并返回了Promise对象
add() instanceof Promise // true
await 不可以单独存在,必须要配合 async 一起存在使用
function sub() {
await 1
}
// 这个方法定义就不满足语法的,会如下报错
// Uncaught SyntaxError: await is only valid in async function
async 配合 await 一起
async function add() {
await 1
}
add()
// add 方法是可以正常执行的,并返回了Promise对象
add() instanceof Promise // true
async await 如何让异步处理更优雅?
async function add() {
const data = await new Promise(function(reslove, reject) {
setTimeout(() => {
reslove(2)
}, 2000)
})
return data;
}
add() // 返回的是2. 如果没有await 返回的是 Promise 对象
// 再也不用回调地狱了
await 后面是普通类型会正常返回
async function add() {
const data = await 5;
console.log(data) // console输出 5
}
add()