async和await

129 阅读1分钟

async函数

  1. 函数的返回值为promise对象
  2. promise对象的结果由async函数执行的返回值决定
async function main(){
    //返回值是非Promise类型的对象,则返回成功
    //如果返回的是一个Promise对象,则返回结果根据Promise的返回结果确定,
    //如果抛出异常,返回的结果是失败的Promise对象;
}
let result = main()
console.log(result)//结果是promise对象,状态是fulfilled
状态是由函数内部的返回值决定

await表达式

  1. await右侧的表达式一般为promise对象,但也可以是其他的值
  2. 如果表达式是promise对象,await返回的是promise成功的值
  3. 如果表达式是其他值,直接将此值作为await的返回值

注意

  1. await必须卸载async函数中,但async函数中可以没有await
  2. 如果await的Promise失败了,就会抛出异常,需要通过try...cathc捕获处理
async function main(){
    let p = new Promise((resolve, reject) => {
        resolve("OK")
    })
    //1、右侧为promise类型的数据
    let res = await p; //返回OK
    
    //2、右侧为其他类型的数据
    let res2 = await 20
    
    //3、如果promise是失败的状态
    try{
        let res3 = await p
    }catch(e){
        console.log(e) //如果 Promise返回失败结果,这里可以拿到。
    }
    
    console.log(res) //返回20
}

main() 

async与await结合实践

const util = require("util")
const mineReadFile = util.promisify(fs.readFile)
async function main(){
    let data1 = await mineReadFile("./resource/1.html")
    let data2 = await mineReadFile("./resource/3.html")
    let data3 = await mineReadFile("./resource/3.html")
    consola.log(data1 + data2 + data3)
}

async与await结合发送ajax请求

function sendAJAX(url){
    return new Promise((resolve, reject) => {
    
    })
}

//接口地址
let btn = document.querySelector("#btn")
btn.addEventListener("click", async function(){
    let result = await sendAJAX("http://......")
    console.log(result)
})