jsasyncawait

coding

  async是一种用同步的方式编写异步代码的方法,与promise一样也是非阻塞的。

  返回值:

   async的返回值是一个promise对象。

  执行顺序:

  async的异步指的是async函数后面的代码是异步的,但async里面还是同步的,但需要注意的是,这里的同步不是说await后面的函数没执行完就不往下执行(指async里面的await后面的代码),而是,当调用async函数,程序执行到await时,1.会先去执行一遍await里面的代码,2.再回到调用async函数后面继续执行,3.完了之后再回到async里面的await后面继续执行。前面说的执行一遍不是说全部执行完毕,await后面的函数里如果有一个定时器(5s),那么,程序并不会等待5s后再执行步骤1,而是执行定时器的时候,异步去执行步骤1后面的。

  来看两个例子:

  1.如果await后面的函数的返回值是一个直接值,或者没有返回值的普通函数。

<script>

function sleep(sec) {

console.log('执行1');

setTimeout(function () {

console.log('执行2');

}, sec * 1000)

}

async function show() {

console.log('start...');

let res = await sleep(5);

console.log('执行3');

}

show();

console.log('执行4');

console.log('执行5');

</script>

  输出结果:

  //start...

  //执行1

  //执行4

  //执行5

  //执行3

  //执行2

  2.如果await后面返回的是一个promise对象。

function sleep(sec) {

console.log('执行1');

returnnew Promise(function (resolve, reject) {

setTimeout(function () {

resolve('aaa');//如果不执行resolve,程序不会继续往下执行

console.log('执行2');

}, sec * 1000)

})

}

async function show() {

console.log('start...');

let res = await sleep(5);

// console.log(res);

console.log('执行3');

}

show();

console.log('执行4');

console.log('执行5');

  输出结果:

  //start...

  //执行1

  //执行4

  //执行5

  //执行2

  //执行3

  解释:当程序执行到await时,会先去执行sleep里面代码,输出“执行1”,并将返回的promise对象放入promise队列中,再去执行show()后面的代码,输出“执行4”,"执行5",然后再回到async里等待await的返回值,再继续await后面的代码。

以上是 jsasyncawait 的全部内容, 来源链接: utcz.com/z/510065.html

回到顶部