当前位置:网站首页>Promise (3) async/await
Promise (3) async/await
2022-08-05 06:56:00 【Do you want to buy groceries?】
async 函数
async 函数是使用async
关键字声明的函数. async 函数是AsyncFunction构造函数的实例, 并且其中允许使用await
关键字.async
和await
关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise
.
特点
1. 函数的返回值为 promise 对象
2. promise 对象的结果由 async 函数执行的返回值决定
async function main(){
//1. 如果返回值是一个非Promise类型的数据,会返回一个resolved的promise对象,value is the data
// return 521;
//2. 如果返回的是一个Promise对象
return new Promise((resolve, reject) => {
resolve('OK');
// reject('Error');
});
//3. 抛出异常
// throw "Oh NO";
}
let result = main();
console.log(result);
await 表达式
1. await 右侧的表达式一般为 promise 对象, 但也可以是其它的值
2. 如果表达式是 promise 对象, await 返回的是 promise 成功的值
3. 如果表达式是其它值, 直接将此值作为 await 的返回值
async function main(){
let p = new Promise((resolve, reject) => {
resolve('OK');
// reject('Error');
})
//1. 右侧为promise的情况
// let res = await p;
//2. 右侧为其他类型的数据
let res2 = await 20;
// console.log(res2); // 20
//3. 如果promise是失败的状态
// try{
// // let res3 = await p;
// }catch(e){
// console.log(e);
// }
}
main();
注意
1. await 必须写在 async 函数中, 但 async 函数中可以没有 await
2. 如果 await 的 promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理
async与await结合
const fs = require('fs');
const util = require('util');
// 将 API 转为promise形式的函数
const mineReadFile = util.promisify(fs.readFile);
//回调函数的方式
// fs.readFile('./resource/1.html', (err, data1) => {
// if(err) throw err;
// fs.readFile('./resource/2.html', (err, data2) => {
// if(err) throw err;
// fs.readFile('./resource/3.html', (err, data3) => {
// if(err) throw err;
// console.log(data1 + data2 + data3);
// });
// });
// });
//async 与 await
// Errors do not need to be judged at every level,使用try...catch即可
async function main(){
try{
//读取第一个文件的内容
let data1 = await mineReadFile('./resource/1.html');
let data2 = await mineReadFile('./resource/2.html');
let data3 = await mineReadFile('./resource/3.html');
console.log(data1 + data2 + data3);
}catch(e){
console.log(e.code);
}
}
main();
边栏推荐
- Late night drinking, 50 classic SQL questions, really fragrant~
- Get the network input dimensions of the pretrained model
- 概率与期望部分题解
- vscode notes
- Drools规则引擎快速入门(一)
- Pytorch分布式并行处理
- 17-VMware Horizon 2203 virtual desktop-Win10 manual desktop pool floating (seventeen)
- Unable to import torchvision. IO. Read_image
- 女生做软件测试会不会成为一个趋势?
- lingo入门——河北省第三届研究生建模竞赛B题
猜你喜欢
随机推荐
VS Code私有服务器部署(私有化)
NB-IOT智能云家具项目系列实站
NACOS配置中心设置配置文件
(2022杭电多校六)1010-Planar graph(最小生成树)
香港国际珠宝展及香港国际钻石、宝石及珍珠展揭幕
Redis的使用
农场游戏果园系统+牧场养殖系统+广告联盟模式流量主游戏小程序APP V1
The NDK compiler so libraries
Nacos集群的搭建过程详解
日本卫生设备行业协会:日本温水喷淋马桶座出货量达1亿套
亚马逊美国站:马术头盔CPC认证标准要求
Nacos配置服务的源码解析(全)
MySQL表操作练习
技术分析模式(十一)如何交易头肩形态
LaTeX使用frame制作PPT图片没有标号
共享内存+inotify机制实现多进程低延迟数据共享
关于Antd的Affix突然不好用了,或者Window的scroll监听不好用了
Writing OpenCV in VSCode
2022杭电多校六 1006-Maex (树形DP)
【内推】新相微电子