async await

async

es7新增async 函数,async 是异步 的意思,可以用于声明一个异步的 function。

    <script>
        async function show(){
            return "异步"
        }
        console.log(show());//async返回的是Promise对象
        show().then(res=>{
            console.log(res);
        })
    </script>

await

await 可以认为是 async wait 的简写。await 用于等待一个异步方法执行完成。
await 必须与async 配合使用(async要放在await最近一个函数的外面),否则会报错。
await后面可以是表达式也可以是一个promise,
在await下面的代码必须等待await执行完之后才能再执行。

封装统一接口地址
   <script>
        function axios(url) {
            return new Promise(function (resolve, reject) {
                $.ajax({
                    url: url, 
                    success: function (res) {
                        resolve(res) //成功回调
                    },
                    error: function (err) {
                        reject(err) //失败回调
                    }
                })
            })
        }
        async function getAsync() {
            var a1 = await axios('data/data.json')  //外面传入不同的接口路径
            var a2 = await axios('data/data1.json')
            console.log( a1, a2)
        }

        getAsync() 
    </script>
async await 是解决异步的终极方案
    <script>
        function axios(url) {
            return new Promise(function (resolve, reject) {
                $.ajax({
                    url: url,
                    success: function (res) {
                        resolve(res) //成功回调
                    },
                    error: function (err) {
                        reject(err) //失败回调
                    }
                })
            })
        }
        async function getAsync() {
            var a1 = await axios('data/data.json')

            if (a1) {
                var a2 = await axios('data/data1.json')
                console.log('a2的结果执行了')
            }
            else {
                var a3 = await axios('data/data2.json')
                console.log('a3的结果执行了')
            }
        }

        getAsync() 
    </script>

使用async await 将异步变为同步,就会存在先执行的代码出错导致下面代码无法执行的问题。如:网络请求不可控,会影响后面代码执行
解决问题的方法:把await 放到 try 中进行执行,如有异常,就使用catch 进行处理

js原生:
try{放网络请求可能出错} catch{捕获错误}

    <script>
        function axios(url) {
            return new Promise(function (resolve, reject) {
                $.ajax({
                    url: url,
                    success: function (res) {
                        resolve(res) //成功回调
                    },
                    error: function (err) {
                        reject(err) //失败回调
                    }
                })
            })
        }
        async function getAsync() {
            try {
                var a1 = await axios('data/data.json')
                var a2 = await axios('data/data1.json')
                console.log(a1, a2)

            } catch (error) {
                console.log('捕捉错误异常,不影响后续代码执行', error.status);
            }

            //后边有代码也不会影响执行
            console.log(666);
        }
        getAsync() 
    </script>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值