异步函数
异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,是代码变得清晰明了
```
const fn = async()=>{}
async function fn(){}
```
```
//1.在普通函数定义的前面加上async关键字 普通函数就变成了异步函数
//2.异步函数默认返回值是promise对象
//3.在异步函数内部使用throw关键字进行错误的抛出
async function fn(){
throw '发生了一些错误'
return 123;
}
fn().then(function(data){
console.log(data)
}).catch(function(err){
console.log(err)
})
```
```
//then(参数1,参数2)
//参数1:用于获取promise对象成功的回调函数
//参数2:用于获取promise对象失败的回调函数
async function fn(a){
if(a !=10){
throw "变量值错误,不等于10";
}else{
return "变量值等于10";
}
}
fn(11).then(function(data){
console.log(data);
},function(info){
console.log(info);
})
```
async关键字
1.普通函数定义前加async关键字 普通函数变成异步函数
2.异步函数默认返回promise对象
3.在异步函数内部使用return关键字进行结果返回,结果会被包裹的promise对象中,return关键字代替了resolve方法
4.在异步函数内部使用throw关键字抛出程序异常
5.调用异步函数再链式调用then方法获取异步函数执行结果
6.调用异步函数再链式调用catch方法获取异步函数执行的错误信息
await关键字
1.await关键字只能出现在异步函数中
2.await promise await后面只能写promise对象 写其他类型的API是不可以的
3.await关键字可以暂停异步函数向下执行 直到promise返回结果
```
async function p1(){
return 'p1'
}
async function p2(){
return 'p2'
}
async function p3(){
return 'p3'
}
async function p4(){
return 'p4'
}
async function p5(){
return 'p5'
}
async function fun(){
var a = await p1();
var b = await p2();
var c = await p3();
var d = await p4();
var e = await p5();
console.log(a);
console.log(b);
console.log(c);
console.log(d);
console.log(e);
}
fun()
```
异步函数的应用
```
const fs = require('fs');
//改造现有异步函数api 让其返回promise对象 从而支持异步函数语法
const promisify = require('util').promisify;
const readFile = promisify(fs.readFile);
async function run(){
let r1 = await readFile('./1.txt','utf8')
let r2 = await readFile('./2.txt','utf8')
let r3 = await readFile('./3.txt','utf8')
console.log(r1)
console.log(r2)
console.log(r3)
}
run();
```