10-Node.js学习笔记-异步函数

异步函数

异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,是代码变得清晰明了

```
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();
```

上一篇:ES6 Promise 让异步函数顺序执行


下一篇:js实现本地的图片压缩上传预览