当前位置:   article > 正文

async await_const res = await bmibiz.gettoken({});undefined

const res = await bmibiz.gettoken({});undefined

 async:

async相当于Promise的语法糖,函数前边加上async,函数里边return返回一个值(实际上返回的是一个promise对象),相当于下边写法,里边如果抛出异常,相当于promise的rejected状态:

  1. async function test() {
  2. return 1
  3. }
  4. const res1 = test()
  5. console.log(res1)
  6. // 相当于
  7. function test() {
  8. return new Promise((resolve, reject) => {
  9. resolve(1)
  10. })
  11. }
  12. const res2 = test()
  13. console.log(res2)

  await:

await需要放在async里边,2个天生是一对,await后边的函数是一个异步请求函数,必须返回一个Promise对象;await还有一个作用就是:对后变函数求值 : 

  1. async function test() {
  2. const res = await scyncFn()
  3. console.log(res)
  4. }
  5. const res1 = test()

tips:

1、使用async await, 当前线程会被阻塞 ,也就是说,一个异步请求,会变成同步执行,例如:

下边,我在node koa中间件中请求百度地址,会发现最后输出结果顺序就是同步执行的。证明:使用async await,可以一个异步请求,变成同步执行的代码。

  1. const Koa = require('koa')
  2. const $axios = require('axios')
  3. const app = new Koa()
  4. app.use( async (ctx, next) => {
  5. console.log('3')
  6. const res = await $axios.get('https://www.baidu.com')
  7. console.log(res)
  8. console.log('4')
  9. })
  10. app.listen(3000)
  11. // 输出结果
  12. /*
  13. '3'
  14. {status:200, header:{} ··· ···}
  15. '4'
  16. */

2、只要加上async 的函数,里边的返回的任何值,都会被包装成一个Promise对象,函数无返回值时,实际上内部会返回一个undefined,此时undefined会被包装成一个Promise对象:

 3、使用await 调用函数执行,此函数必须返回一个Promise对象,如果此函数里边使用setTimeout模拟异步,setTimeout需要放在Promise对象里:

  1. function test1() {
  2. return new Promise((resolve, reject) => {
  3. setTimeout(() => {
  4. resolve('1')
  5. }, 2000)
  6. })
  7. }
  8. async function test() {
  9. const res = await test1()
  10. console.log(res) // 2秒之后返回 ’1‘
  11. }
  12. test()

4、对于异步函数的异常捕获:

(在项目中,通常会把获取到的数据这样处理: if(!res) return false,这样做法会把异常信息丢失掉,下边我们可以使用 把获取到的const res = await err( ) 放在 try{}catch(){} 进行捕获异常, 如果异步函数有异常,直接可以捕获到!!!)

  1. function err() {
  2. return new Promise((resolve, reject) => {
  3. setTimeout(() => {
  4. reject('失败')
  5. }, 2000)
  6. })
  7. }
  8. async function test() {
  9. try {
  10. const res = await err()
  11. console.log(res) // 2秒之后返回 ’1‘
  12. }catch (e) {
  13. console.log(e)
  14. }
  15. }
  16. test()

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/294631
推荐阅读
相关标签
  

闽ICP备14008679号