es8 异步函数async/await

文章目录

  • 异步函数
    • 1. async
    • 2. await
  • 总结


异步函数

async/await 是ES8新增的两个函数关键字,让以同步方式写的代码能够异步执行

1. async

async关键字用于声明异步函数,这个关键字可以用在函数声明、函数表达式、箭头函数和方法前

    async function f() {
     
        return 1;
    }

如果异步函数用return返回了值(如果没有return则会返回undefined),这个值会被自动包装在一个resolved的Promise中,result为该值

    async function f() {
     
        return 1;
    }
    f().then(console.log); // 1

async确保函数返回一个Promise,同时也将非Promise的值包装进去

2. await

await只在async函数内工作,该关键字可以暂停异步函数代码的执行,等待Promise解决

    async function f() {
     

        let promise = new Promise((resolve, reject) => {
     
            setTimeout(() => resolve("done!"), 1000)
        });
        let p = await promise;  // 暂停
        console.log(p); // 一秒后 "done!";
    }
    f();

函数被暂停在了await那一行,直到promise settle时拿到p的值并继续执行
相比于 promise.then,它只是获取 promise 的结果的一个更优雅的语法,同时也更易于读写。
上面的函数可以改写为:

    let promise = new Promise((resolve,reject)=>{
     
        setTimeout(()=> resolve("done!"),1000)
    });
    promise.then(console.log);

ps.不能在普通函数中使用 await ,同时不能在顶级上下文如M

你可能感兴趣的:(es8 异步函数async/await)