javascript中async/await详解

  • Post author:
  • Post category:java




async,await


async



Generator

的语法糖,异步编程的终极解决方案,彻底解决回调地狱的问题


async

用来声明一个function是异步的,而

await

用来等待一个异步函数的执行

注意:


await

只能出现在

async

函数里面



async

async function asyncfunc() {
    return '奥里给'
}
const result = asyncfunc()
console.log(result) // Promise
result.then((val)=> {
    console.log(val) // 奥里给
})

这里我们可以看到

async

函数输出的是一个

Promise

对象,如果

async

函数中没有返回值它会返回一个

Promise.resolve(undefined)



await


  • await

    可以理解为

    async wait

  • await

    在我看来是先执行右侧表达式,再等待右侧表达式的返回值

  • await

    后面可以跟任何的JS表达式
  • 如果

    await

    等待的不是

    Promise

    对象,那

    await

    的返回值就是右侧表达式的运算结果。
  • 如果

    await

    等到的是

    Promise

    对象,那

    await

    就会

    阻塞

    后面的代码,等待

    Promise

    对象执行

    resolve()

    ,

    await

    的返回值就是此

    resolve()

    中的参数


    注意:

    这里讲的阻塞指的是

    async

    函数内部的阻塞。来,举个例子:

// 1. 正常Promise
  new Promise((resolve, reject) => {
   
    console.log(1);
    resolve(4);
  }).then((val) => {
   
    console.log(val)
  })
  new Promise((resolve, reject) => {
   
    console.log(2);
    resolve(5);
  }).then((val) => {
   
    console.log(val)
  })
  new Promise((resolve, reject) => {
   
    console.log(3);
    resolve(6);
  }).then((val) => {
   
    console.log



版权声明:本文为abxxcd原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。