JS 23 - 非同步执行,也是要依序排队!

大家好!

今天我们要实作的静态函式有点像 Promise 的感觉。
我们进入今天的主题吧!


程序码

Felix.queue = function (fns, data) {
    if (!Felix.isArrayLike(fns)) return;
    var i = 0;
    var next = function (data) {
        var fn = fns[i++];
        return fn === fns[fns.length - 1] ? fn(data) : fn(next, data);
    };
    next(data);
};

实测

Felix.queue([
    function (next) {
        console.log(0);
        setTimeout(next, 1000);
    },
    function (next) {
        console.log(1);
        window.addEventListener('click', function listener(e) {
            e.currentTarget.removeEventListener(e.type, listener);
            return next(e);
        });
    },
    function (data) {
        console.log(`You clicked the ${data.target.tagName}.`);
    }
]);

// Log: 0
/* 一秒後 */
// Log: 1
/* 点击後 */
// Log: You clicked the BODY.

执行到第一个函式时,不管点击几次都不会触发事件,因为监听器要等到第二个函式执行时才会被建立。


差不多也到尾声了,接下来我们要介绍的是函式库的静态方法。
如果对文章有任何疑问,也欢迎在下方提问和建议!
我是 Felix,我们明天再见!


<<:  [day23]Vue实作-交易建立页面-API串接问题处理

>>:  创业经营(二)软件版本控管

企划实现(18)

在撰写程序时我发现了一个以前没有遇到过的事情,我原先一直以为是因为环境导致的但是後来我发现跟环境没有...

原来产品也有自己的生命历程 Product Life Cycle

有些人可能以为在完成开发後,把产品交付给用户,只要有持续的做迭代与优化,产品的使用用户就会越来越多,...

Day 21 - Handle Side Effect I

在介绍本篇我们先来复习一下先前在 pure function 那章提过的一些名词 Side Effe...

Day 9 进阶型别 Part - 2

今天要来介绍 Discriminated Union、Type casting、Index prop...

11.unity地图障碍物(Tilemap Collider 2D)

结合前几天学到的东西,可以来制作地图障碍物并且在地图内奔跑! 地图障碍物 1.画一张纯障碍物的Til...