Tapable中文文檔

非直譯,加入了一些自己的理解,原文

Tapable

    var Tapable = require("tapable");

Tapable是一個用于事件發布訂閱執行的插件架構

在使用上,你僅僅需要繼承它

    function MyClass() {
        Tapable.call(this);
    }

    MyClass.prototype = Object.create(Tapable.prototype);

    MyClass.prototype.method = function() {};

或者復制它的屬性到你的類中

    function MyClass2() {
        EventEmitter.call(this);
        Tapable.call(this);
    }

    MyClass2.prototype = Object.create(EventEmitter.prototype);
    Tapable.mixin(MyClass2.prototype);

    MyClass2.prototype.method = function() {};

公開的方法

apply

    void apply(plugins: Plugin...)

通過arguments獲得所有傳入的插件對象,并調用插件對象的apply方法,注冊插件(所以,一個合法的插件應該包含入口方法apply)

plugin

    void plugin(names: string|string[], handler: Function)

事件綁定函數,參數說明
names: 需要監聽的事件名稱,可以傳入事件名稱集合(同時綁定多個事件),也可以傳入單個事件名稱
handler: 事件的處理函數

受保護的方法

applyPlugins

    void applyPlugins(name: string, args: any...)

觸發事件name,傳入參數args,并行的調用所有注冊在事件name上的處理函數

applyPluginsWaterfall

    any applyPluginsWaterfall(name: string, init: any, args: any...)

觸發事件name,串行的調用注冊在事件name上的處理函數(先入先出),最先執行的處理函數傳入init和args,后續的處理函數傳入前一個處理函數的返回值和args,函數最終返回最后一個處理函數的返回結果

applyPluginsAsync

    void applyPluginsAsync(
        name: string,
        args: any...,
        callback: (err?: Error) -> void
    )

觸發事件name,串行的調用注冊在事件name上的處理函數(先入先出),倘若某一個處理函數報錯,則執行傳入的callback(err),后續的處理函數將不被執行,否則最后一個處理函數調用callback。

插件注冊此類事件,處理函數需要調用callback,這樣才能保證監聽鏈的正確執行

    var myPlugin = function() {

    }
    myPlugin.prototype.apply(tapable) {
        tapable.plugin('name', function(arg1, arg2, arg3, callback)) {
            //do something
            ...
            //調用callback
            callback();
        }
    }

applyPluginsBailResult

    any applyPluginsBailResult(name: string, args: any...)

觸發事件name,串行的調用注冊在事件name上的處理函數(先入先出),傳入參數args,如果其中一個處理函數返回值!== undefined,直接返回這個返回值,后續的處理函數將不被執行

applyPluginsAsyncWaterfall

    applyPluginsAsyncWaterfall(
        name: string,
        init: any,
        callback: (err: Error, result: any) -> void
    )

觸發事件name,串行的調用注冊在name上的處理函數(先入先出),第一個處理函數傳入參數init,后續的函數依賴于前一個函數執行回調的時候傳入的參數nextValue,倘若某一個處理函數報錯,則執行傳入的callback(err),后續的處理函數將不被執行,否則最后一個處理函數調用callback(value)

插件注冊此類事件,處理函數需要調用callback(err, nextValue),這樣才能保證監聽鏈的正確執行

    var myPlugin = function() {

    }
    myPlugin.prototype.apply(tapable) {
        tapable.plugin('name', function(arg1,..., argx, callback)) {
            //do something
            ...
            //調用callback
            var args = Array.prototype.slice.call(arguments, 1);
            var callback = args.pop();
            callback(null, value);
        }
    }

applyPluginsAsyncSeries

    applyPluginsAsyncSeries(
        name: string,
        args: any...,
        callback: (err: Error, result: any) -> void
    )

這個方法同applyPluginsAsync

applyPluginsParallel

    applyPluginsParallel(
        name: string,
        args: any...,
        callback: (err?: Error) -> void
    )

觸發事件name,傳入參數args,并行的調用所有注冊在事件name上的處理函數,倘若任一處理函數執行報錯,則執行callback('err'),否則當所有的處理函數都執行完的時候調用callback()

同樣的,插件注冊此類事件的時候,回調函數要執行callback

applyPluginsParallelBailResult

    applyPluginsParallelBailResult(
        name: string,
        args: any...,
        callback: (err: Error, result: any) -> void
    )

觸發事件name,串行的執行注冊在事件name上的處理函數(先入先出),每個處理函數必須調用callback(err, result),倘若任一處理函數在調用callback(err, result)的時候,err!==undefined || result!==undefined,則callback將真正被執行,后續的處理函數則不會再被執行。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容