zoukankan      html  css  js  c++  java
  • 令人清爽的异步函数async、await

    1.什么是async、await?

    async用于声明一个函数是异步的。而await从字面意思上是“等待”的意思,就是用于等待异步完成。并且await只能在async函数中使用;
    通常async、await都是跟随Promise一起使用的。为什么这么说呢?因为async返回的都是一个Promise对象同时async适用于任何类型的函数上。这样await得到的就是一个Promise对象(如果不是Promise对象的话那async返回的是什么 就是什么);
    async function testSync() {
    const response = await new Promise(resolve => {
    setTimeout(() => {
    resolve("async await test...");
    }, 1000);
    });
    console.log(response);
    }
    testSync();

    2.async、await串行并行处理

    串行:等待前面一个await执行后接着执行下一个await,以此类推
    async function asyncAwaitFn(str) {
    return await new Promise((resolve, reject) => {
    setTimeout(() => {
    resolve(str)
    }, 1000);
    })
    }
    const serialFn = async () => { //串行执行
    console.time('serialFn')
    console.log(await asyncAwaitFn('string 1'));
    console.log(await asyncAwaitFn('string 2'));
    console.timeEnd('serialFn')
    }
    serialFn();
    并行:将多个promise直接发起请求(先执行async所在函数),然后再进行await操作。
    async function asyncAwaitFn(str) {
    return await new Promise((resolve, reject) => {
    setTimeout(() => {
    resolve(str)
    }, 1000);
    })
    }
    const parallel = async () => { //并行执行
    console.time('parallel')
    const parallelOne = asyncAwaitFn('string 1');
    const parallelTwo = asyncAwaitFn('string 2')
    //直接打印
    console.log(await parallelOne)
    console.log(await parallelTwo)
    console.timeEnd('parallel')
    }
    parallel()

    async、await错误处理使用try catch

    async function catchErr() {
    try {
    const errRes = await new Promise((resolve, reject) => {
    setTimeout(() => {
    reject("http error...");
    }, 1000);
    );
    //平常我们也可以在await请求成功后通过判断当前status是不是200来判断请求是否成功
    // console.log(errRes.status, errRes.statusText);
    } catch(err) {
    console.log(err);
    }
    }
    catchErr(); //

  • 相关阅读:
    [Camtasia报错]An error occurred in the Recorde System Audio setup Failed
    [Oracle报错]RMAN-12005: error during channel cleanup/ORA-19550: cannot ...
    [Teamviewer报错]现在无法捕捉屏幕画面。这可能是由于快速的...
    [SVN技能]SVN服务迁移(Windows-Linux)
    [RabbitMQ技能]安装部署单节点RabbitMQ
    运算符的那些事
    java之连接数据库之JDBC访问数据库的基本操作
    面向对象编程之OC
    集合
    面向对象
  • 原文地址:https://www.cnblogs.com/panax/p/9450534.html
Copyright © 2011-2022 走看看