当前位置:网站首页>Promise从入门到精通(第4章 async 和 await)
Promise从入门到精通(第4章 async 和 await)
2022-07-28 00:41:00 【若水cjj】
Promise从入门到精通(第4章 async 和 await)
第4章 async 和 await
4.1. mdn文档
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/await
4.2. async函数
函数的返回值为 promise 对象
promise 对象的结果由 async 函数执行的返回值决定(和then的特性相同)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script> // async函数返回结果是一个Promise async function main(){
// 1.如果返回值是一个非Promise,那么返回的Promise状态为fulfilled,结果值为返回的结果 // return "123"; // 2.如果返回值是一个Promise,那么返回的Promise状态为Promise的状态,结果值为Promise返回的结果 // return new Promise((resolve,reject)=>{
// reject("123"); // }); // 3.如果返回值是抛出的异常,那么返回的Promise状态为reject,结果值为抛出的异常 throw "error"; } let result = main() console.log(result); </script>
</body>
</html>
4.3 await函数
4.3.1. await表达式
await 右侧的表达式一般为 promise 对象, 但也可以是其它的值
如果表达式是 promise 对象, await 返回的是 promise 成功的值
如果表达式是其它值, 直接将此值作为 await 的返回值
**4.3.2 ** 注意
await 必须写在 async 函数中, 但 async 函数中可以没有 await
如果 await 的 promise 失败了, 就会抛出异常, 需要通过 try…catch 捕获处理
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script> // async函数返回结果是一个Promise async function main() {
let p = new Promise((resolve, reject) => {
resolve("ok"); }) // 1.如果await右侧是Promise,那么返回的是 promise 成功的值 let res = await p; console.log(res); // 2.如果await右侧不是Promise,那么直接将数据返回 let res2 = await "123"; console.log(res2); // 3.1.如果await右侧是Promise,但Promise执行失败,那么await会抛出异常,需要使用try-catch捕获 let p2 = new Promise((resolve, reject) => {
reject("ok"); }); try {
let res3 = await p2; } catch (error) {
console.log(error); } } main() </script>
</body>
</html>
4.4 async和await结合案例
// 要求读取当前文件夹下三个文件,并合并输出
// 回调函数形式实现
fs.readFile('./1.html',(err, data1)=>{
if(err) throw err;
fs.readFile('./1.html',(err, data2)=>{
if(err) throw err;
fs.readFile('./1.html',(err, data3)=>{
if(err) throw err;
console.log(data1+data2+data3);
})
})
})
// async和await结合实现
const fs = require('fs');
const util = require('util');
const minReadFile = util.promisify(fs.readFile);
async function main(){
try {
let data1 = await minReadFile("./1.html");
let data2 = await minReadFile("./2.html");
let data3 = await minReadFile("./3.html");
console.log(data1+data2+data3);
} catch (error) {
console.log(error);
}
}
4.5 async和await结合AJAX发送请求
<script>
function sendAJAX(url){
return new Promise((resolve, reject)=>{
})
}
let btn = document.querySelector("#btn");
btn.addEventListener('click', async function(){
let duanzi = await sendAJAX("https://api.apiopen.top/getJoke");
console.log(duanzi);
})
</script>
边栏推荐
- 软件测试面试题:请详细介绍一下各种测试类型的含义?
- 什么是方法,什么是方法论:了解自我精进提升的底层逻辑
- 一种比读写锁更快的锁,还不赶紧认识一下
- 执行 Add-Migration 迁移时报 Build failed.
- Flex布局学习完成PC端
- 网易云仿写
- Unity universal red dot system
- Traversal and properties of binary trees
- They are all talking about Devops. Do you really understand it?
- Interviewer: are you sure redis is a single threaded process?
猜你喜欢

Cloud native enthusiast weekly: the evolution of Prometheus architecture

53:第五章:开发admin管理服务:6:开发【admin管理员退出登录,接口】;(一个点:我们想要修改一个采用了某种编码方式的值时,新的值最好也按照这种编码方式编码后,再去修改;)

Interviewer: are you sure redis is a single threaded process?

Establishment of elk log analysis system

Hcip day 12 notes

54: Chapter 5: develop admin management services: 7: face warehousing process; Face login process; The browser turns on the video debugging mode (so that the camera can also be turned on in the case o

Hcip 13th day notes

Starfish Os X MetaBell战略合作,元宇宙商业生态更进一步

54:第五章:开发admin管理服务:7:人脸入库流程;人脸登录流程;浏览器开启视频调试模式(以便能够在本机的不安全域名的情况下,也能去开启摄像头);

学习了循环碰到了编写计算n的阶乘的题目,由此引发了一系列问题,包括一些初学者常见的坑,以及如何简化代码
随机推荐
Favorite songs
Game 302 of leetcode
IT这个岗位,人才缺口百万,薪资水涨船高,上不封顶
54:第五章:开发admin管理服务:7:人脸入库流程;人脸登录流程;浏览器开启视频调试模式(以便能够在本机的不安全域名的情况下,也能去开启摄像头);
Software testing interview question: what is the purpose of test planning? What are the contents of the test plan? Which are the most important?
Custom type: structure, enumeration, union
Gbase 8C server signal function
软件测试面试题:你所熟悉的软件测试类型有哪些?
A lock faster than read-write lock. Don't get to know it quickly
微信小程序实现动态横向步骤条的两种方式
Unity universal red dot system
HyperMesh circular array - plug in
Gbase 8C transaction ID and snapshot
存储成本降低 80%,有赞数据中台成本治理怎么做的?
Gbase 8C database object size function (I)
Flex开发网页实例web端
清除浮动的原因和六种方法(解决浮动飞起影响父元素和全局的问题)
How to evaluate the effectiveness of R & D personnel? Software Engineer reports help you see everyone's contribution
软件测试面试题:为什要在一个团队中开展测试工作?
机器学习如何做到疫情可视化——疫情数据分析与预测实战