async和await的使用

2023-01-16 0 507

async表达式

甚么是async表达式?

async表达式是采用asyncURL新闻稿的表达式。

mdn文件格式:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function

async表达式有下列三个特征:

表达式的codice为Promise第一类Promise第一类的结论由async表达式继续执行的codice下定决心

为什么要用async表达式?

async和awaitURL让他们能用一类更简约的形式写下如前所述Promise的触发器犯罪行为,而无须故意地拉艾调用promise。

async表达式是不是采用?

采用实例:

<script> // async 回到三个Promise第一类。 async function main() { // 1. 假如codice是三个非Promise类别的统计数据,那回到的是三个获得成功的Promise第一类,结论是回到的统计数据。 return 5555; // 2. 假如回到的是三个Promise第一类,所以那个第一类的状况和结论,是那个表达式的状况和结论 // return new Promise((resolve, reject) => { // // resolve(OK); // // reject(ERROR); // // throw 手忙脚乱了 // }) // 3. 抛出异常,回到的是三个失败的Promise第一类,结论为throw后面抛出的信息。 // throw error; } let result = main(); console.log(result); </script>

await表达式

甚么是await表达式?

await 操作符用于等待三个Promise第一类。它只能在触发器表达式 async function 中采用。

语法:

[codice] = await 表达式;

表达式:三个Promise第一类或者任何要等待的值。

codice:回到Promise第一类的处理结论。假如等待的不是Promise第一类,则回到该值本身。

mdn文件格式:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/await

为何要用await表达式?

async和awaitURL让他们能用一类更简约的形式写下如前所述Promise的触发器犯罪行为,而无须故意地拉艾调用promise。

await表达式是不是采用?

采用实例:

<script> async function main() { let p = new Promise((resolve, reject) => { resolve(OK); // reject(ERROR) // 配合下面的案例3采用。案例1会直接报错,因为没有异常处理,await需要手动处理异常。案例2,能够得到结论,并且抛出异常。 }) // 1. await 右侧为Promise第一类的情况,codice为Promise第一类获得成功的结论值。 // let result = await p; // console.log(result); // OK // 2. 右侧为其他类别的统计数据,所以codice为 await 后面的那个值 let result = await 20; console.log(result) // 20 // 3. 右侧的Promise第一类为失败的状况,则会抛出异常,此时用try…catch 捕获异常,能在catch中拿到失败的结论 // try { // let result = await p; // } catch(e) { // console.log(e); // } } main(); </script>

注意:

await必须写在async表达式中,但async表达式中能没有await。假如await的Promise失败了,就会抛出异常,需要通过try…catch捕获处理。

案例1:

html中简单的放三个按钮就行

<button></button>

js代码:

<script> // 封装AJAX请求 function sendAJAX(url) { return new Promise((resolve, reject) => { let xhr = new XMLHttpRequest(); xhr.open(GET, url); xhr.responseType = json; xhr.send(); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status >= 200 && xhr.status < 300) { resolve(xhr.response); } else { reject(xhr.status); } } } }) } // 段子接口地址:https://api.apiopen.top/getJoke const btn = document.querySelector(button); btn.addEventListener(click, async function() { let result = await sendAJAX(https://api.apiopen.top/getJoke); console.log(result); }) </script>

案例2(简单用了下Node.js,能忽略那个案例):

采用Node.js读取三个文件(任意选三个文件)中的统计数据并进行拼接,然后在控制台输出。

代码:

const fs = require(fs); const util = require(util); // 回调表达式形式实现 fs.readFile(./resource/1.txt, (err, data1) => { if (err) throw err; fs.readFile(./resource/content.txt, (err, data2) => { if (err) throw err; fs.readFile(./resource/2.txt, (err, data3) => { if (err) throw err; console.log(data1 + data2 + data3); }) }) }) // 采用async和await实现 const mineReadFile = util.promisify(fs.readFile); async function main() { // 假如手忙脚乱 try { // 读取文件内容 let data1 = await mineReadFile(./resource/1x.txt); let data2 = await mineReadFile(./resource/content.txt); let data3 = await mineReadFile(./resource/2.txt); console.log(data1 + data2 + data3); } catch(e) { console.log(e); } }

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务