async 与 await 的用法详解

概念

async用于声明function为异步方法,返回Promise实例,例如

async function fn(){
    console.log('async')
}

返回值

上面说到,async的返回值为promise对象,那么函数本身的返回值去哪了?熟知promise的同学都知道,promise的异步结果是通过then()或者catch()方法来获取并进一步处理。异步函数的返回值会当成resolve状态来处理,通过.then()来接收,而异步函数中出现的错误,则当成reject来处理,通过.catch()来捕获。同一时刻,只能处理其中一个状态,也就是resolve或者reject(也就是说函数要么处理成功,要么处理失败)。

await

顾名思义为“等待”意思,常与async搭配使用。

var value = await myPromise();

等待 其实就是指暂停当前 async function 内部语句的执行,等待后面的 myPromise() 处理完返回结果后,继续执行 async function 函数内部的剩余语句;myPromise() 是一个 Promise对象。

注意:await必须在async方法内部使用,其后如果跟随其他值,则直接返回该值,如果其后跟着的是Promise实例,则必须等到promise返回结果(即通过resolve或者reject处理的状态),否则后面的代码不会执行。注意:若返回reject状态,其后代码都不会执行。

async function fn() {
        console.log(1);
        var result = await new Promise(function (resolve, reject) {
            setTimeout(function () {
                console.log("2")
                resolve('result')

            }, 2000);
            console.log("我是setTimeout外的语句")//内部还是按照同步的顺序执行



        });
        console.log(3);//这下面的会等待result执行完之后再执行
        console.log(await 4); 
    }
    fn();
//输出
1
我是setTimeout外的语句
2 两秒后输出
3
4

 

posted @ 2022-06-06 16:13  语梦·添香  阅读(540)  评论(0编辑  收藏  举报