Bootstrap

async与await

1.MDN文档

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/await

2.async函数

1.函数的返回值为promise对象
2.promise对象的结果由async函数执行的返回值决定

<script setup>
    async function main() {
        // 1.如果返回值是一个非Promise类型的数据,会转换为promise对象
        // return 521
        //2.如果返回的是一个Promise对象,则结果就是就是这个返回的结果
       /* return new Promise((resolve,reject) => {
            // resolve('OK')
            reject('Error')
        }) */
        //3.抛出异常 【状态失败,结果就是抛出的值】
        throw "Oh NO"
    }
    let result = main()
    console.log('结果', result)
</script>

3.await表达式

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

4.注意

1.await必须写在async函数中,但async函数中可以没有await
2.如果await的promise失败了,就会抛出异常,需要通过try…catch捕获处理

<script setup>
    async function main() {
        let p = new Promise((resolve,reject) => {
            // resolve('OK')
            reject('Error')
        })
       /* 1.右侧为promise的情况 (成功)
        let res = await p;
        console.log(res)  // ---> OK */
        // 2.右侧为其他类型的数据
        let res2 = await 20
        console.log(res2)  //-->20
        // 3.如果promise是失败的状态,会报错 【可以用try...catch...进行捕获】
        try{
            let res3 = await p;
            // console.log('res3',res3)
        }catch(e){
            console.log('失败',e)
        }
    }
    
    main()
</script>
;