当前位置: 首页 > news >正文

个人网站如何建设三桥网站建设

个人网站如何建设,三桥网站建设,wordpress文章id修改,专业的企业进销存软件比较好webpack plugin webpack完成的复杂炫酷的功能依赖于插件机制#xff0c;webpack的插件机制依赖于核心的库#xff0c; tapable tapable是一个类似于nodejs的eventEmitter的库#xff0c; 主要是控制钩子函数的发布喝定于#xff0c;当时#xff0c;tapable提供您的hook机…webpack plugin webpack完成的复杂炫酷的功能依赖于插件机制webpack的插件机制依赖于核心的库 tapable tapable是一个类似于nodejs的eventEmitter的库 主要是控制钩子函数的发布喝定于当时tapable提供您的hook机制比较全面分为同步和异步两个大类 根据事件执行的终止条件的不同 const {SyncHook} require(tapable) const hook new SyncHook([arg1, arg2]) hook.tap(a, function(arg1, arg2) {console.log(ar) }) hook.tap(b,function(arg1, arg2) {console.log(b) }) hook.call(1, 2)BasicHook: 执行每一个不关心函数的返回值有SyncHook, AsyncParallelHook, AsyncSeriesHook BailHook: 顺序执行hook遇到第一个结果result!undefined则返回不在执行 SyncBailHook, AsyncSeriesBailHook, AsyncParallelBailHook tapable sync SyncHook SyncBailHook SyncWaterfallHook SyncLoopHook Async AsyncParallel AsyncParallelHook AsyncParallelBailHook AsyncSeries AsyncSeriesHook AsyncParallelBailHook AsyncSeriesLoopHook AsyncSeriesWaterfallHook每个Hook的用法 Basic: 不关心回调函数返回值[SyncHook, AsyncParallelHook, AsyncSeriesHook] Bail: 只要其中一个监听函数的返回值不为undefined则终止执行。 [SyncBailHook, AsyncParallelHook, AsyncSeriesBailHook] waterfall: 前一个监听函数的返回值部位undefined则作为下一个监听函数的第一个参数 [SyncWaterfallHook, AsyncSeriesWaterfallHook] Loop: 如果有一个监听函数的返回值不为undefined 则终止向下执行从头开始执行直到所有监听函数的返回值为undefined。[SyncLoopHook, AsyncSeriesLoopHook]~ javascript const {SyncHook} require(tapable) let hook new SyncHook([name]) hook.tap(demo, function(params) {console.log(demo, params) }) hook.tap(demo2, function(params) {console.log(demo2, params)return true }) hook.tap(demo3, function(params) {console.log(demo3, params) }) hook.call(hello SyncHook)class SyncHook {constructor(args []) {this._args argsthis.tasks []}tap(name, task) {this.tasks.push(task)}call(...args) {const params args.slice(0, this._args.length)this.tasks.forEash(task task(...params))} }const {SyncBailHook} require(tapable) let hook new SyncBailHook([name]) hook.tap(demo, function(params) {console.log(demo, params) }) hook.tap(demo2, function(params) {console.log(demo2, params)return true }) hook.tap(demo3, function(params) {console.log(demo3, params) }) hook.call(hello SyncBailHook)SyncBailHook钩子遇到回调函数中返回结果不为undefined的时候则跳过下面所有的逻辑 class SyncBailHook {constructor(args) {this._args _argsthis.tasks []}tap(name, task) {this.tasks.push(task)}call() {const args Array.from(arguments).slice(0, this._args.length)for(let i 0; i this.tasks.length; i) {if(result ! undefiend) {break}}} }SyncWaterfallHook const {SyncWaterfallHook} require(tapable) const hook new SyncWaterfallHook([author, age]) hook.tap(测试1, (params1, params2) {console.log(测试1接受的参数, params1, params2) }) hook.tap(测试2, (params1, params2) {console.log(测试2接受的参数, params1, params2) }) hook.tap(测试3,(params1, params2) {console.log(测试3接受的参数, params1, params2) }) hook.call(嘎嘎嘎, 99)syncWaterfallHook是一个同步的瀑布类型的hook瀑布类型的钩子就是如果前一个事件的函数结果部位undefined则result会作为后一个事件函数的第一个参数也就是上一个函数的执行结果会成为下一个函数的参数 const {SyncLoopHook} require(tapable) const hook new SyncLoopHook([]) let count 5 hook.tap(测试1, () {console.log(测试1里面的count, count)if([1, 2, 3].includes(count) {return undefiend} else {count--return 123}) }) hook.tap(测试2, () {console.log(测试2里面的count, count)if([1, 2].includes(count) {return undefiend} else {count--return 123}) }) hook.tap(测试3, () {console.log(测试3里面的count,count)if([1].includes(count) {return undefiend} else {count--return 123}) }) hook.call()syncLoophookasyncparallelHook是一个异步并行基本类型的Hook 与同步不同的地方在于 会同时开启多个异步任务而且需要通过tapSaync const {AsyncParallelHook} require(tapable) const hook new AsyncParallelHook([author, age]) console.log(time) hook.tapAsync(测试1, (params1, params2) {setTimeout(() {console.log(测试1接受的参数 params1, params2)callback()}, 2000) }) hook.tapAsync(测试2, (params1, params2, callback) {console.log(测试2接受的参数, params1, params2)callback() }) hook.tapAsync(测试3,(params1, params2,callback) {console.log(测试3接受的参数, params1, params2)callback() }) hook.callAsync(嘎嘎嘎, 99,(err, result) {console.log(这个是成功的回调,err, result)console.timeEnd(time) })AsyncParallelBailHook是一个异步并行保险类型的hook只要其中一个有返回值 就会执行callAsync中的回调 const {AsyncParallelHook} require(tapable) const hook new AsyncParallelBailHook([author, age]) console.time(time) hook.tapAsync(测试1, (params1, params2, callback) {console.log(测试1接受的参数,params1, params2)setTimeout(() {callback()},1000) }) hook.tapAsync(测试2, (params1,params2,callback) {console.log(测试2接受的参数,params1, params2) setTimeout(() {callback(null, 测试2有返回值)}, 2000) }) hook.tapAsync(测试3, (params1, params2, callback) {console.log(测试3接受的参数,params1, params2)setTimeout(() {callback(null, 测试3有返回值)}, 3000) }) hook.callAsync(嘎嘎嘎, 99, (err, result) {//等全部都完成了才会走到这里来console.log(这是成功后的回调, result);console.timeEnd(time); });AsyncSeriesHook是一个异步的串行的类型的hook只有前面的执行完成了后面的才会执行 const {AsyncSeriesHook} require(tapable) const hook new AsyncSeriesHook([author, age]) console.time(time) hook.tapAsync(测试1 (params1, params2, callback) {console.log(测试1接受的参数, params1, params2)setTimeout(() {callback()}, 1000) }) hook.tapAsync(测试2 (params1, params2, callback) {console.log(测试2接受的参数, params1, params2)setTimeout(() {callback()}, 2000) }) hook.tapAsync(测试3 (params1, params2, callback) {console.log(测试3接受的参数, params1, params2)setTimeout(() {callback()}, 3000) }) console.timeEnd()AsyncSeriesBailHook 是一个异步串行保险类型的hook在串行的执行过程中只要其中一个有返回值后面就不会执行 const {AsyncSeriesBailHook} require(tapable) const hook new AsyncParallelHook([author, age]) hook.tapAsync(测试1,(params1, params2, callback) {console.log(测试1接受的参数,params1, params2)setTimeout(() {callback()}, 1000) }) hook.tapAsync(测试2,(params1, params2,callback) {console.log(测试2接受的参数,params1, params2)setTimeout(() {callback()}, 2000) }) hook.tapAsync(测试3,(params1, params2,callback) {console.log(测试3接受的参数,params1, params2)setTimeout(() {callback()}, 3000) }) hook.callAsync(嘎嘎嘎, 99, (err, result) {//等全部都完成了才会走到这里来console.log(这是成功后的回调, result);console.timeEnd(time); });AsyncSeriesWaterfallHook是一个异步串行瀑布类型的hook 如果前一个事件函数的结果result!undefined,则result会作为后一个事件函数的第一个参数也就是上一个函数的执行结果会称为下一个函数的参数 const {AsyncSeriesWaterfallHook} require(tapable) const hook new AsyncSeriesWaterfallHook([author, age]) console.time(time) hook.tapAsync(测试1, (params1, params2, callback) {console.log(测试1接受的参数, params1, params2)setTimeout(() {callback(() {callback(null, 2)}, 1000)}) }) hook.tapAsync(测试2, (params1, params2, callback) {console.log(测试2接受的参数, params1, params2)setTimeout(() {callback(null, 3)},2000) }) hook.tapAsync(测试3, (param1, param2, callback) {console.log(测试3接收的参数, param1, param2);setTimeout(() {callback(null, 4);}, 3000); });hook.callAsync(嘎嘎嘎, 99, (err, result) {//等全部都完成了才会走到这里来console.log(这是成功后的回调, err, result);console.timeEnd(time); });Tapable拦截器 Tapable提供的所有的hook都支持注入Interception它和Axios的拦截器的效果非常类似,可以通过拦截器对整个Tapable发布/订阅流程进行监听从而触发对应的逻辑 const hook new SyncHook([arg1, arg2, arg3]) hook.intercept({// 每次调用hook实例的tap方法注册回调函数的时候就会调用该方法// 并且接受tap作为参数还可以对tap进行修改register: (tapInfo) {console.log(${tapInfo.name} is doing its job)return tapInfo},// 通过hook实例对象上的call方法时候触发拦截器call: (arg1, arg2, arg3) {console.log(starting to calculate routes)}// 在调用被注册的每一个事件函数之前执行tap: (tap) {console.log(tap, tap))}// loop类型钩子中每个事件函数被调用前触发拦截器方法 loop:(...args) {console.log(args, loop)} })
http://www.w-s-a.com/news/67821/

相关文章:

  • 一家专做有机蔬菜的网站万户网络是干嘛的
  • 十堰百度网站建设八宝山做网站公司
  • 地区电商网站系统建筑施工图纸培训班
  • 网站外包维护一年多少钱医院网站 功能
  • 电子商务市场的发展前景seo推广平台服务
  • 乐清网页设计公司哪家好seo推广任务小结
  • 360建筑网是什么pc优化工具
  • 越秀免费网站建设风景区网站建设项目建设可行性
  • 网站建站公司一站式服务学校网站开发招标
  • asp.net mvc 5 网站开发之美电商网站 流程图
  • 室内设计素材网站推荐郑州专业做淘宝网站建设
  • 新建的网站怎么做seo优化模板规格尺寸及价格
  • 平湖网站设计做电子元器件销售什么网站好
  • 可视化网站模板我想建个网站网站怎么建域名
  • 达州网站建设qinsanw南京市建设发展集团有限公司网站
  • django 网站开发实例公司排行榜
  • 韩国做美食网站阳江网站建设 公司价格
  • 网站开发哪里接业务长春高端模板建站
  • 深圳网站制作公司方案dw一个完整网页的代码
  • asp手机网站源码下载做seo推广网站
  • 网站优化建议怎么写网站维护主要有哪些内容和方法
  • 建设网站需要钱吗网络推广加盟
  • 高清素材图片的网站泰安网签备案查询
  • 自助网站建设怎么建设房地产的最新政策
  • 企业网站 生成html网站侵权怎么做公证或证据保存
  • php 手机网站cms系统购物网站制作流程
  • 网络公司网站开发河北省城乡住房和建设厅网站
  • 做网站配置wordpress 中文api
  • 怎样把网站做的好看县蒙文网站建设汇报
  • 网站的优化什么做广西桂林新闻最新消息