其他分享
首页 > 其他分享> > async和await

async和await

作者:互联网

async

内置执行器:Generator 函数的执行必须依靠执行器,而 async 函数自带执行器,调用方式跟普通函数的调用一样更好的语义:async 和 await 相较于 * 和 yield 更加语义化
更广的适用性:co 模块约定,yield 命令后面只能是 Thunk 函数或 Promise对象。而 async 函数的 await 命令后面则可以是 Promise 或者 原始类型的值(Number,string,boolean,但这时等同于同步操作)
返回值是 Promise:async 函数返回值是 Promise 对象,比 Generator 函数返回的 Iterator 对象方便,可以直接使用 then() 方法进行调用

 

await

 

await 后面接一个会 return new promise 的函数并执行它

await 只能放在 async 函数里

 

一些例子:(加强理解)

   如果不是 promise , await会阻塞后面的代码,先执行async外面的同步代码,同步代码执行完,再回到async内部,把这个非promise的对象,作为 await表达式的结果。

async function async1() {
    await async2(); // 先执行async2(),await下面所有的代码都是异步
    console.log(1); // 异步
}
async function async2() {
    console.log(2);
}
console.log(3);
async1();

// 3
// 2
// 1

  如果是 promise 对象,await 也会阻塞async后面的代码,先执行async外面的同步代码,等着 Promise 对象 fulfilled,然后把 resolve 的参数作为 await 表达式的运算结果。

function fn() {
    return new Promise(resolve => {
        console.log(1); // 同步2
        resolve();
    })
}
async function async1() {
    await fn().then(() => {  // 先执行fn(),await下面所有的代码都是异步
        console.log(2); // 异步1
    })
    console.log(3); // 异步1的下一个异步
}
console.log(4);  // 同步1
async1();

// 4
// 1
// 2
// 3

  如果asycn里的代码都是同步的,那么这个函数被调用就会同步执行

async function fn(){
  console.log('a'); // 同步1
}
fn();
console.log('b'); // 同步2

//a
//b
async function async1() {
    console.log(1); // 同步2
    await async2(); // 先执行async2()  再await 
    console.log(2); // 异步(await下面所有的代码都是异步)
}
async function async2() {
    console.log(3); // 同步3
}
console.log(4); // 同步1
async1();
console.log(5); // 同步4

// 4
// 1
// 3
// 5
// 2
async function async1() {
    console.log(1);
    await async2();
    console.log(2);
    await async3();
    console.log(3);
}

async function async2() {
    return new Promise((resolve) => {
        console.log(4);
        resolve(); // 如果没有resolve(),await async2()后的代码都不会执行,只输出6 1 4 7
    })
}

async function async3() {
    console.log(5);
}

console.log(6);

async1();

console.log(7);

// 6
// 1
// 4
// 7
// 2
// 5
// 3

 

2021-12-27 17:28:58

 

标签:function,async2,console,log,await,async
来源: https://www.cnblogs.com/zhenggc99/p/15737116.html