JavaScript链式结构序列化详解

  其实看看上面的代码,不难发现,ifelse这种格式,其实就是数据结构中的单链表,那么,初步利用JavaScript实现单链表,如下:

  其中f1,f2,f3为判断函数,并且我们假设,如果诸如f1、f2、f3返回next时,就继续往下查找,否则,停止往下查找。如下:

  But,JavaScript的push方法返回的是数组的新长度,而不是数组对象哦。

  So,那我们只能新写一个add方法,效果和push一样,但是返回数组对象。如下:

  但是,这样有个缺点,我们是将add、resolve方法绑定在全局变量thens中的,总不能每次创建一个数组时,都复制粘贴一遍方法吧,所以重构代码如下:

  显然,add,resolve这种公共方法,在每次实例化时,都创建一遍是不科学的,so,利用prototype在原有的基础上继续变形,如下:

  不错,但是这样,我们每次都得手动new一个Slink,有点麻烦,所以,我们将new Slink这个过程,封装到函数中,如同jQuery一样,如下:

  我们将f1利用setTimeout变成了异步,按照上述代码的逻辑,应该是等f1完全执行完毕(包括setTimeout执行)后,判断是否执行f2,但真的如此吗?

  由于有异步代码,且必须在异步代码后处理后续的链,那么我们就等待异步代码执行完毕后,才执行后续的链嘛,如下:

  好了,由于在函数中,我们使用了this,其代表Slink对象,且改变了resolve方法,固,需细微调整Slink构造函数和原型链,如下:

  是的,宗旨都一样,达到异步代码扁平化目的,不过这里的代码比Promise要简约得多啦。

  这几天又降温了,简直冷的不想出门。在暖和的家里泡上一杯热茶,自由自在地玩玩游戏,可以说...[详细]

  每日头条、业界资讯、热点资讯、八卦爆料,全天跟踪微博播报。各种爆料、内幕、花边、资讯一网打尽。百万互联网粉丝互动参与,TechWeb官方微博期待您的关注。

相关阅读