async具体使用方法以及原理

发布时间:2024-01-10 19:00

async介绍:

1.es7 的 语法
2.通常和这个promise联合使用
3. 这个 async/await语法 也是异步代码用同步代码的写法

async 异步的 修饰一个函数
await async wait 异步的等待 等待我们上面的函数完成
* 1. 简单的写个 函数 调用 输出结果 hello async
* 2. 函数加个 修饰符 async 输出的结果 是 Promise对象
* 3. 分析结果 async 给函数 自动包裹了一层 Promise resolve()函数
* 4. 取值 取出函数的返回值 promise.then() 脱壳
* 5. promise.then().catch()对应 reject()
*/

async 代码示范

 async function testAsync(flag) {
        if (flag) {
            return "hello async"
        } else {
            throw "抛出异常"
        }
    }


    //    let  result =  testAsync()
    //    console.log(result);

    testAsync().then(res=>{
        console.log("res:",res);
    })
    console.log("async后面,但是先于async的代码执行");

    console.log(testAsync(true)); // async 包了一层 Promise.resolve()
    console.log(testAsync(false));// async 包了一层 Promise.reject()

    testAsync(false).then(res=>{
            console.log("res-1-1-",res);
        }).catch(error=>{
            console.log("res错误:",error);
        })

awiat
1. await 规定只能在 async 函数中使用 ,用在普通函数会报错
2. await 放在 Promise调用之前 ,强制等待后面代码的执行,直到promise对象 resolce,得到resoleve的值

通过await调用之后返回值不再是promise,而是promise.then时所传递的数据(如果失败则会抛异常) 我称为 “脱壳”

 function testPromise() {
        return new Promise((resolve,reject)=>{
            // 模拟异步
            setTimeout(()=>{
                resolve("测试 原生 promise")
            },2000)
        })
    }
    async function testAs() {
        let r1 = await testAsync(true)
        // 再次证明 async 函数如果不是promise 会自动包裹一层promise
        console.log("测试结果-1:",r1);

        let r2 = await testPromise()
        // 如果async 函数已经是 promise了 就不用自己在包裹了
        console.log("测试结果-2:",r2);

        //***** await  catch 怎么写
        try {
            // true/ false 自己测试
            let r3 = await testAsync(false)
            console.log("测试结果-3:",r3);
        } catch (error) {
            console.log("测试结果-错误-3:",error);
        }

    }
    testAs()

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号