Node.js异步编程(三)
1. 异步函数
- 异步函数是异步编程语法的终极解决方案, 它可以让我们将异步代码变成同步的形式,让代码不再有回调函数嵌套,使代码变得清晰明了。
- 基础语法
async function fn () {
throw '发生了一些错误'
return 123
}
fn ().then(data => console.log(data))
.catch(err => console.log(err))
async function p1 () {
return 'p1'
}
async function p2 () {
return 'p2'
}
async function p3 () {
return 'p3'
}
async function run () {
let r1 = await p1()
let r2 = await p2()
let r3 = await p3()
console.log(r1)
console.log(r2)
console.log(r3)
}
run()
1.1 async关键字
- 普通函数定义前加
async关键字
, 普通函数变异步函数 - 异步函数默认
返回promise对象
- 在异步函数内部使用
return关键字
进行结果返回, 结果会被包裹在promise对象中, return关键字代替了resolve方法 - 在异步函数内部使用
throw关键字
抛出程序异常 - 调用异步函数再链式调用
then方法
获取异步函数执行结果 - 通过异步函数再链式调用
catch()方法
获取异步函数执行的错误信息
1.2 await关键字
- await关键字只能出现异步函数中
- await promise await 后面只能写promise对象, 写其他类型的API是不可以的
- await关键字可暂停异步函数向下执行, 直到promise返回结果
2. 异步函数在Node.js使用方法
const fs = require('fs')
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()