ES8学习之async await

496 阅读1分钟

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()