认识
一、认识
tapable
提供了一系列事件的发布订阅 API
,通过 Tapable
我们可以注册事件,从而在不同时机去触发注册的事件进行执行。
二、同步异步
在 Tapable
中所有注册的事件可以分为同步、异步两种执行方式,正如名称表述的那样:
-
同步表示注册的事件函数会同步进行执行: 同步钩子
tap
方法是唯一的注册事件的方法,通过call
方法触发同步钩子的执行。 -
异步表示注册的事件函数会异步进行执行: 异步钩子可以通过
tap
、tapAsync
、tapPromise
三种方式来注册,同时可以通过对应的call
、callAsync
、promise
三种方式来触发注册的函数。同时异步钩子可以分为:-
异步串行钩子( AsyncSeries ): 可以被串联(连续按照顺序调用)执行的异步钩子函数
-
异步并行钩子( AsyncParallel ): 可以被并联(并发调用)执行的异步钩子函数
-
三、执行机制
Tapable
可以按照异步/同步执行分类的同时也可以按照执行机制进行分类,比如:
3.1 Basic Hook
Basic Hook
基本类型的钩子,它仅仅执行钩子注册的事件,并不关心每个被调用的事件函数返回值如何。
3.2 Waterfall Hook
Waterfall Hook
瀑布类型的钩子,瀑布类型的钩子和基本类型的钩子基本类似,唯一不同的是瀑布类型的钩子会在注册的事件执行时将事件函数执行非 undefined
的返回值传递给接下来的事件函数作为参数。
3.3 Bail Hook
Bail Hook
保险类型钩子,保险类型钩子在基础类型钩子上增加了一种保险机制,如果任意一个注册函数执行返回非 undefined
的值,那么整个钩子执行过程会立即中断,之后注册事件函数就不会被调用了。
3.4 Loop Hook
Loop Hook
循环类型钩子,循环类型钩子稍微比较复杂一点。循环类型钩子通过 call
调用时,如果任意一个注册的事件函数返回值非 undefined
,那么会立即重头开始重新执行所有的注册事件函数,直到所有被注册的事件函数都返回 undefined
。