async

async是 Generator 函数的语法糖,优化了语法,更好用,更直观。

语法

async function name([param[, param[, ... param]]]) {
     
    statements 
}
  • name

函数名称。

  • param

要传递给函数的参数的名称。

  • statements

包含函数主体的表达式。可以使用await机制。

返回值是一个Promise,这个promise要么会通过一个由async函数返回的值被解决,要么会通过一个从async函数中抛出的(或其中没有被捕获到的)异常被拒绝。

async函数可能包含0个或者多个await表达式。await表达式会暂停整个async函数的执行进程并出让其控制权,只有当其等待的基于promise的异步操作被兑现或被拒绝之后才会恢复进程。promise的解决值会被当作该await表达式的返回值。

async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise,那么它将会被隐式地包装在一个promise中。

async function foo() {
     
   return 1
}
等价于:

function foo() {
     
   return Promise.resolve(1)
}

async函数的函数体可以被看作是由0个或者多个await表达式分割开来的。从第一行代码直到(并包括)第一个await表达式(如果有的话)都是同步运行的。这样的话,一个不含await表达式的async函数是会同步运行的。然而,如果函数体内有一个await表达式,async函数就一定会异步执行。

async function foo() {
     
   await 1
}
等价于

function foo() {
     
   return Promise.resolve(1).then(() => undefined)
}

示例:

function resolveAfter2Seconds() {
     
  return new Promise(resolve => {
     
    setTimeout(() => {
     
      resolve('resolved');
    }, 2000);
  });
}

async function asyncCall() {
     
  console.log('calling');
  const result = await resolveAfter2Seconds();
  console.log(result);
  // calling
  //resolved

}

asyncCall();

async是和promise搭配使用的,await后跟一个返回paromise的函数,await promise();会等await后函数返回之后在继续执行,都知道Generator的精髓就是暂停,async就不再用next一次一次调了,
示例‘22’是最后才打印的,都知道Generator可以把异步函数同步化,那async功能当然也是一样的。

你可能感兴趣的:(ES6,es6)