【jquery】jq里deferred与ES6promise的异同

您所在的位置:网站首页 deferred和accrued 【jquery】jq里deferred与ES6promise的异同

【jquery】jq里deferred与ES6promise的异同

2023-11-25 06:27| 来源: 网络整理| 查看: 265

这里面有个设计思路跟node的流很像,真正的执行函数在别的地方,在self里放入的fire用来传参和this,传给firewith,firewith在传给真正的fire函数。其实这么写说实话感觉有点兜了一圈。

真正的fire为什么用for循环写?主要是为了配置参数stopOnFalse,有这个参数的话,如果返回值为false就break掉,后面不会执行。

说一下callback这个传入参数,会做成个对象,比如once memory,就靠空格做成option对象,后面通过对象获取参数。

说一下once这个参数,就是只执行一次,是通过testing这个参数来进行判断,如果走了次真正的fire函数,那么就给testing加true,在第二次用户调用fire的时候,会执行firewith,进行判断,如果没有配置once或者testing没有true就可以再次执行,否则就不能执行了。

说一下memory这个参数,就是在第一次执行后进入真正的fire里用个memory变量把参数给记着,第二次添加函数的时候,先看列表里有几个函数,然后把参数传进真正的fire,真正的fire用设置的起始位置开始执行函数,把记着的参数甩给他。这样就能确保不会把上一次add的函数执行。

总结一下callback技巧,总体来说没啥东西,设置参数主要还是靠弄个变量然后进行判断。拿到的callback返回值从本质上来说就是个闭包,就是数组在这个闭包里面。而外部是不能通过callback的返回值点list来获取数组的,而返回值是self对象,这个对象又去引用了本应该销毁的callbacks数组。从这里可以发现,我们手写的promise实际是new一个实例做的,会暴露出函数数组,而这里callback做成了闭包,不会暴露数组。当然系统原生的promise不会暴露数组。

下面看deferred函数。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3