ES6的async/await

上文写了下Promise, 有些时候我们一个流程里使用了太多的promise,会发现then也一大堆,仿佛又回到了之前的回调地狱,理解起来也没那么容易。

aync的用法很简单,以一个函数为例, async放到定义前面即可

async function a() {
    console.log(1)
}

async 执行后返回的是一个Promise对象

await的意思就是同步,而且await必须在async标记的函数里面才能使用,不然会报错

Promise函数前面加上await,说明等待,需要这个代码执行完毕,才能执行下面的

async function a() {
    console.log( await b())
    // return 1
}
function b() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(2)
        }, 1000)
    })
}
a()  // 2

这样使用async await就能很好的解决Promise,then过多的问题了。

同时,使用的话,比如调两个接口,有一个接口必须需要前一个接口的值,这里就可以使用async await

function ajax1() {
    return new Promise((resolve, reject) => {
        const data = ajax('接口1', {params}).then((res) => {

        }).data
        resolve(data)
    })
}

function ajax2(data) {
    return new Promise((resolve, reject) => {
        const data1 = ajax('接口1', {data}).then((res) => {

        }).data
        resolve(data1)
        // resolve(data)
    })
}
async function getData () {
    const data = await ajax1()
    await ajax2(data)
}

这样的话代码逻辑看起来也会比较清晰,阅读良好

只不过会有个小问题

如果某些接口返回数据比较慢的话,我们的页面可能加载速度会比较慢,毕竟await的时候,相当于同步,对js进程造成了阻塞,导致后面的代码无法运行。这个对性能还是会起到一定的负面作用。

这种问题的话,要么需要后端接口方对接口进行优化,要么自身解决(不做阐述,其实我也不会)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中提到了使用async/await必须在async函数的作用域下使用,并且在使用await时要注意语法错误。而引用中介绍了async/await是ES7引入的一种异步编程方式,它提供了使用同步样式的代码异步访问资源的方式,并且不会阻塞线程。使用async/await可以简化异步编程的代码,使其更易读。同时,async/await是基于Promise的,可以通过try-catch来捕获异常。引用中还提到了多个await命令可以统一放在try...catch结构中。根据这些信息,可以得出jquery也可以使用async/await来实现异步操作。 使用jquery实现async/await的方式与使用原生JavaScript的方式基本相同。首先,确保在引入jquery之后在async函数的作用域下进行操作。然后,可以使用$.ajax来发送异步请求,并在需要等待其返回结果时使用await关键字。例如,可以将多个并发请求统一放在try...catch结构中,如下所示: ```javascript async function main() { try { const result1 = await $.ajax({ url: 'url1', method: 'GET' }); const result2 = await $.ajax({ url: 'url2', method: 'GET' }); const result3 = await $.ajax({ url: 'url3', method: 'GET' }); console.log('Final: ', result1, result2, result3); } catch (error) { console.error(error); } } main(); ``` 在上述代码中,使用$.ajax发送了三个并发请求,并使用await关键字等待每个请求的结果。最后,将三个请求的结果输出到控制台。如果发生异常,可以通过try-catch捕获并处理。这样,就可以使用jquery的async/await方式来实现异步操作了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ES7 async/await](https://blog.csdn.net/JunChow520/article/details/103289715)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [12. ES6 async/await 的使用](https://blog.csdn.net/ladymarry/article/details/127929395)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值