zoukankan      html  css  js  c++  java
  • 异步Promose和Async/Await的攻略

    ES6推出了Promise,解决了异步回调;

    ES7推出了async/await,解决了满屏then的问题。

    一、Promise

    Promise是将异步方法封装在一个Promise对象中,后期调用包括pending、resolve、reject三种状态。

    重点将resolve和reject,resolve是成功回调,通过then进行回调注册;reject是失败回调,通过catch进行回调。

     syncMethod: function () {
                    console.log('sync方法执行开始');
                    console.log('1秒方法开始执行');
                    this.asyncMethod(1).then(() => {
                        console.log('1秒方法执行成功!');
                    });
                    console.log('100秒方法开始执行');
                    this.asyncMethod(100).then(() => { console.log('100秒执行成功!') }).catch((err) => { console.log(err) });
                    console.log('ync方法执行结束');
                },
                asyncMethod: function (seconds) {
                    return new Promise((resolve, reject) => {
                        if (typeof seconds !== 'number' || seconds > 10) reject(new Error('参数必须是number类型,并且小于等于10'));
                        setTimeout(() => {
                            resolve(`我延迟了${seconds}秒后输出的,是第二个函数`)
                        }, seconds * 1000)
                    })

    以上Promise的缺点主要有以下:

    1、如果多个异步方法,会导致满屏then,并且异步直接存在逻辑问题就会在then中嵌套异步调用并且then,逻辑复杂。

    二、async/await

    async/await直观反馈异步调用。

      syncMethod: async function () {
                    // console.log('sync方法执行开始');
                    // console.log('1秒方法开始执行');
                    // this.asyncMethod(1).then(() => {
                    //     console.log('1秒方法执行成功!');
                    // });
                    // console.log('100秒方法开始执行');
                    // this.asyncMethod(100).then(() => { console.log('100秒执行成功!') }).catch((err) => { console.log(err) });
                    // console.log('ync方法执行结束');
                    console.log('sync方法执行开始');
                    console.log('1秒方法开始执行');
                    await this.asyncMethod(1);
                    console.log('100秒方法开始执行');
                    try {
                        await this.asyncMethod(100);
                    } catch (e) {
                        console.log(e);
                    }
    
                    console.log('ync方法执行结束');
                },

    更加贴切异步变同步!

  • 相关阅读:
    C# 实现从程序集中抽取内嵌资源文件
    git clone 显著提速,解决Github代码拉取速度缓慢问题
    C# 将List数据 导出到csv 文件
    Nginx的location匹配规则-根据url 路径重定向到不同的IP
    WinForm最小化到托盘以及托盘右键菜单
    安卓手机浏览器调试-Debug模式
    C#-Forms.Timer、Timers.Timer、Threading.Timer的比较和使用
    批处理实现批量创建快捷方式
    设计模式(六)装饰模式(转)
    设计模式(五)桥接模式(转)
  • 原文地址:https://www.cnblogs.com/cainiaoguoshi/p/14285981.html
Copyright © 2011-2022 走看看