美文网首页
利用es6的async函数,编写动画顺序执行代码

利用es6的async函数,编写动画顺序执行代码

作者: kofzx | 来源:发表于2018-12-07 11:40 被阅读0次

    今日天气比较冷,办公室氛围也冷了下来,难得的安静氛围,终于平息了往日的喧闹。

    于是乎,我看了一下es6的async函数章节,学习一下新的知识。此篇文章用以记录 async 函数的实现原理。

    翻到了 async 函数的实现原理 小节,其中文中有个用以部署一系列的动画的例子,让我心动不已。据文章所述,该例子可解决平日里让我懊恼的尴尬问题:怎么优雅地编写多个动画顺序执行代码(不要写一大堆嵌套的回调那种)。

    但是es6入门书籍里面的例子是伪代码例子,可能需要转些弯才行,因此下面会给出一个模拟动画的真实案例:

    思路便是拿定时器来开刀:

    
    var anim = function (ms) {
    
        return new Promise((resolve, reject) => {
    
            setTimeout(() => {
    
                resolve(ms);
    
            }, ms);
    
        });
    
    };
    
    async function chainAnim (animations) {
    
        let ret = null;
    
        for (let an of animations) {
    
            ret = await anim(an);
    
            console.log(an);
    
        }
    
        return ret;
    
    }
    
    let res = chainAnim([1000, 2000, 3000]);
    
    

    执行以上代码,讲道理就会:等待一秒,输出1000,再等待两秒,输出2000,最后,等待三秒,输出3000。

    这样子把定时器想象成动画的持续时间,其实就已经实现了动画的按顺序执行,且可以监听到整个动画的最终完成回调,即名为'3000'的动画。

    
    res.then(r => {
    
        console.log('最后一个动画是:' + r + ' 完成了。');
    
    });
    
    

    好了,至此案例结束,是不是简单易用?比嵌套的回调写法要好多了。

    总结:其实案例的精髓之处还是得归功于es6的async函数,特别是await,顾名思义--“挂起”,先“挂起”不执行,接收到“命令”后再执行。本人对es6也并不是研究很深,如果对async,await语法不了解的,可以前往阮一峰大神的es6入门站点去查阅一番。-----------至此共勉-----------

    相关文章

      网友评论

          本文标题:利用es6的async函数,编写动画顺序执行代码

          本文链接:https://www.haomeiwen.com/subject/fqqthqtx.html