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(); //

  • 相关阅读:
    C++:变量声明和定义的关系
    Docker 方式搭建 zookeeper + kafka 集群
    Centos7.6系统下docker的安装
    CentOS7服务器下安装配置SSL
    《深入浅出密码学》|ing
    车联网入侵检测技术(持续更新)
    Hive的安装及交互方式
    Centos7中安装MySQL5.7记录
    Zookeeper-分布式锁代码实现
    【Java】String字符串的最大长度
  • 原文地址:https://www.cnblogs.com/panax/p/9450534.html
Copyright © 2011-2022 走看看