使用await/async函数代替jquery的ajax函数

其实在10年前,我读大学的期间,感觉jquery的ajax太好用了,但是随着时代的发展,JS的坑点越来越明显,其中一点就是地狱回调的问题,好在es7中提出了await/async函数 本文将jquery中的ajax转化成使用await/async函数的使用方式

首先需要定义一个函数,用于返回Promise类型的对象,接着需要使用resolve和reject函数用于异步处理结果

 

function fetch(url) {
  const p = new Promise((resolve, reject) => {
    $.ajax(url, {
      dataType: 'json',
      timeout: 5000,
      success: function (result) {
        if (result.title) {
          resolve(result.title);
        } else {
          reject(new Error('没有标题'))
        }
      },
      error: function () {
        reject(new Error('返回错误'))
      }
    })
  })
  return p
}

async function clickHandler() {
  const url = 'https://jsonplaceholder.typicode.com/todos/1'
  try {
    const title = await fetch(url)
    console.log('标题是:' + title)
  } catch (e) {
    console.error(e)
  }
}

$('#btn1').on('click', clickHandler)

 

引用中提到了使用async/await必须在async函数的作用域下使用,并且在使用await时要注意语法错误。而引用中介绍了async/awaitES7引入的一种异步编程方式,它提供了使用同步样式的代码异步访问资源的方式,并且不会阻塞线程。使用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捕获并处理。这样,就可以使用jqueryasync/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、付费专栏及课程。

余额充值