async与await的使用方法

使用Promise.then方法

function test () {
  var p = new Promise(function (resolve, reject) {
    if (true) {
      resolve('abcde')
    } else {
      reject('error')
    }
  })
  return p
}

test().then(res => {
  console.log(res)
})
console.log('a')
// 输出如下
// a
// abcde

使用async与await

function test () {
  var p = new Promise(function (resolve, reject) {
    if (true) {
      resolve('abcde')
    } else {
      reject('error')
    }
  })
  return p
}
async function callTest () {
  const res = await test()
  console.log(res)
}
callTest()
console.log('a')
// 输出结果
// a
// abcde
  1. 这里要注意 await 只能用在async方法内部,不能直接在外部使用.

使用Promise.then方法处理多个异步请求

function test () {
  var p = new Promise(function (resolve, reject) {
    if (true) {
      resolve('abcde')
    } else {
      reject('error')
    }
  })
  return p
}
function test1 () {
  var p = new Promise(function (resolve, reject) {
    if (true) {
      resolve('ABCDE')
    } else {
      reject('error')
    }
  })
  return p
}
test().then(res => {
  console.log(res)
  test1().then(res => {
    console.log(res)
  })
})
console.log('a')
// 打印结果
// a
// abcde
// ABCDE

如果处理多个异步方法的话,代码就会逐步陷入回调地狱而async与await解决了这个问题,请看下面代码

async与await处理多个异步请求

function test () {
  var p = new Promise(function (resolve, reject) {
    if (true) {
      resolve('abcde')
    } else {
      reject('error')
    }
  })
  return p
}
function test1 () {
  var p = new Promise(function (resolve, reject) {
    if (true) {
      resolve('ABCDE')
    } else {
      reject('error')
    }
  })
  return p
}
async function callTest () {
  const res = await test()
  console.log(res)
  const res1 = await test1()
  console.log(res1)
  // 这里还能加更多
}
callTest()
console.log('a')
// 打印结果
// a
// abcde
// ABCDE

async与await处理异常

function test () {
  var p = new Promise(function (resolve, reject) {
    if (false) {
      resolve('abcde')
    } else {
      reject('error')
    }
  })
  return p
}
async function callTest () {
  const res = await test().catch(res => { console.log('第12行' + res) })
  console.log('第13行' + res)
  if (res) {
    console.log(res)
  }
}
callTest()
console.log('a')
// 输出结果
// a
// 第12行error
// 第13行undefined

在await后面用catch接受异常就不会产生控制台报错,在处理结果的时候,可以看到12行打印出了promise返回的error,在13行打印了结果res的结果为undefined

如果调用test方法的时候不进行catch处理,那么控制台就会直接报错

a
(node:10104) UnhandledPromiseRejectionWarning: error
(node:10104) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:10104) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the 
Node.js process with a non-zero exit code.

通过node运行的情况下输入以上错误信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值