Node.js异步编程(三)

Node.js异步编程(三)

1. 异步函数

  • 异步函数是异步编程语法的终极解决方案, 它可以让我们将异步代码变成同步的形式,让代码不再有回调函数嵌套,使代码变得清晰明了。
  • 基础语法
// 1. 在普通函数定义的前面加上async关键字, 普通函数就变成了异步函数
// 2. 异步函数默认的返回值是promise对象
// 3. 在异步函数内部使用throw关键字进行错误的抛出
async function fn () {
  throw '发生了一些错误'
  return 123
}

// console.log(fn ())
fn ().then(data => console.log(data))
  .catch(err => console.log(err))
// await关键字
// 1.它只能出现在异步函数中
// 2.await promise 他可以暂停异步函数的执行, 等待promise对象返回结果后再向下执行函数
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关键字

  1. 普通函数定义前加async关键字, 普通函数变异步函数
  2. 异步函数默认返回promise对象
  3. 在异步函数内部使用return关键字进行结果返回, 结果会被包裹在promise对象中, return关键字代替了resolve方法
  4. 在异步函数内部使用throw关键字抛出程序异常
  5. 调用异步函数再链式调用then方法获取异步函数执行结果
  6. 通过异步函数再链式调用catch()方法获取异步函数执行的错误信息

1.2 await关键字

  1. await关键字只能出现异步函数中
  2. await promise await 后面只能写promise对象, 写其他类型的API是不可以的
  3. await关键字可暂停异步函数向下执行, 直到promise返回结果

2. 异步函数在Node.js使用方法

const fs = require('fs')
// 改造现有异步函数api, 让其返回promise对象, 从而支持异步函数语法
const promisify = require('util').promisify
// 调用promisify方法改造现有异步API, 让其返回promise对象
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()

猜你喜欢

转载自blog.csdn.net/weixin_47085255/article/details/107349663
今日推荐