首页 > 编程语言 >avvio fastify的异步node 应用启动框架

avvio fastify的异步node 应用启动框架

时间:2023-12-05 09:46:10浏览次数:36  
标签:node use cb instance duplicate ms fastify avvio opts

avvio 是fastify 团队开发的一个node 应用异步启动的框架,实现了一些方便的异步处理,同时还可以保证
执行顺序,在实际业务中还是一个比较有用的工具包

参考使用

  • app.js
 
const avvio = require("avvio")()
 
function a (instance, opts, cb) {
  (opts.use || []).forEach(_ => { instance.use(_, { use: opts.subUse || [] }) })
  setTimeout(cb, 10)
}
const pointer = a
 
function b (instance, opts, cb) {
  (opts.use || []).forEach(_ => { instance.use(_, { use: opts.subUse || [] }) })
  setTimeout(cb, 20)
}
 
function c (instance, opts, cb) {
  (opts.use || []).forEach(_ => { instance.use(_, { use: opts.subUse || [] }) })
  setTimeout(cb, 30)
}
 
avvio
  .use(first, { hello: 'world' })
  .use(duplicate, { count: 0 })
  .use(function a (instance, opts, cb) {
    instance.use(pointer, { use: [b], subUse: [c] })
      .use(b)
    setTimeout(cb, 42)
  })
  .after(function (err, cb) {
    if (err) {
      console.log('something bad happened')
      console.log(err)
    }
    console.log('after first and second')
    cb()
  })
  .use(duplicate, { count: 4 })
  .use(third)
  .ready(function (err) {
    if (err) {
      throw err
    }
    console.log('application booted!')
  })
 
avvio.on('preReady', () => {
  console.log(avvio.prettyPrint())
})
 
function first (instance, opts, cb) {
  console.log('first loaded', opts)
  instance.use(second)
  setTimeout(cb, 42)
}
 
function second (instance, opts, cb) {
  console.log('second loaded')
  process.nextTick(cb)
}
 
function third (instance, opts, cb) {
  console.log('third loaded')
  cb()
}
 
function duplicate (instance, opts, cb) {
  console.log('duplicate loaded', opts.count)
  if (opts.count > 0) {
    instance.use(duplicate, { count: opts.count - 1 })
  }
  setTimeout(cb, 20)
}
  • 运行效果
first loaded { hello: 'world' }
second loaded
duplicate loaded 0
after first and second
duplicate loaded 4
duplicate loaded 3
duplicate loaded 2
duplicate loaded 1
duplicate loaded 0
third loaded
bound root 309 ms
├─┬ first 49 ms
│ └── second 1 ms
├── duplicate 21 ms
├─┬ a 130 ms
│ ├─┬ a 64 ms
│ │ └─┬ b 53 ms
│ │   └── c 31 ms
│ └── b 22 ms
├── bound _after 1 ms
├─┬ duplicate 106 ms
│ └─┬ duplicate 85 ms
│   └─┬ duplicate 63 ms
│     └─┬ duplicate 42 ms
│       └── duplicate 21 ms
└── third 0 ms
 
application booted!

说明

avvio 在fastify框架中是一个比较重要的,了解一些avvio的机制可以更好的了解fastify的运行机制

参考资料

https://github.com/fastify/avvio
https://github.com/fastify/fastify/blob/main/package.json
https://github.com/fastify/process-warning

标签:node,use,cb,instance,duplicate,ms,fastify,avvio,opts
From: https://www.cnblogs.com/rongfengliang/p/17876527.html

相关文章

  • nodejs002
    数组//数组//Java数组必须是同一类型//但是js的数组没有数据类型区分,一个数组里既可以有数值,字符等letarr=[1,3,4,2,5,6,7,2,3]//数组的长度letlen=arr.length//遍历arr.forEach(item=>{console.log(item);})//数组的过滤,把符合条件的结果,返回新的数......
  • 【小沐学前端】Node.js实现基于Protobuf协议的数据处理
    1、简介1.1nodeNode.js是一个开源的、跨平台的JavaScript运行时环境。Node.js是一个开源和跨平台的JavaScript运行时环境。它是几乎任何类型项目的流行工具!Node.js在浏览器之外运行V8JavaScript引擎(GoogleChrome的内核)。这使得Node.js非常高效。2、Protobu......
  • 【小沐学前端】Node.js实现UDP通信
    1、node简介Node.js是一个开源的、跨平台的JavaScript运行时环境。Node.js是一个开源和跨平台的JavaScript运行时环境。它是几乎任何类型项目的流行工具!Node.js在浏览器之外运行V8JavaScript引擎(GoogleChrome的内核)。这使得Node.js非常高效。Node.js应用在......
  • nodejs基础001
    常量//常量consta=1;console.log(a);变量//变量letb=2;console.log(b);letd="ffff";console.log(d)//全局变量,不建议使用c=3;console.log(c);//变量名:有些特定的是不允许作为变量名的,比如if,else等等函数//函数functionadd(x,y,z){let......
  • nodeConfig
    nodenode管理工具settings#nvm下载后,设置镜像root:D:\soft\nvmpath:D:\soft\nodejsarch:64proxy:nonenode_mirror:http://npm.taobao.org/mirrors/node/npm_mirror:https://npm.taobao.org/mirrors/npm/下载node版本#下载nodenvminstall14.21.3#查看下......
  • 安装多个版本的Node以及版本切换nvm
    一、安装多个版本的Node(也可以直接通过本文第二种方法下载多个版本的Node)1.下载Node.js安装包(window系统下载以msi结尾的安装包)  2.安装第一个版本的Node(此处首先安装的较低版本:12.22.12)2.1先创建Node文件夹,再创建v12.22.12文件夹(用于保存所有版本的Node)  ......
  • CentOS安装node环境,并编译前端项目
    https://www.jianshu.com/p/a0e0311d62591.centos安装node环境1.下载nodejs最新的tar包可以在下载页面https://nodejs.org/en/download/中找到下载地址。然后执行指令$wgethttps://nodejs.org/dist/v9.3.0/node-v9.3.0-linux-x64.tar.xz2,解压包$tar-xvfnod......
  • MAC/Win安装多个版本node命令
    今天在自己电脑上紧急修复线上问题,但是项目down下来以后install后启动发生报错,谷歌以后发现是node版本问题,但是自己开发的ui组件库是18+的node版本,项目是16+的node版本才能启动,所以需要在电脑上安装多个node版本进行管理,后期考虑到项目的多样性,需要用到不同版本的node做支持......
  • Win7系统安装高版本node.js方法,node 16.x ,node 17.x(跳过安不了17),node 18.x,node 19.x 2
    随着前端框架的不断升级,node16.3.0的版本远远跟不上开发需要,导致win7无法安装高于16.3.0版本的node.js,经过不断的尝试和查找网上的帖子,终于解决了可以升级到19.x的nodejs了方法如下:(1)按照原来方式先升级到Nodejs16.3.0,先看我上次发的内容。地址:https://www.cnblogs.com/wuzexin/p......
  • 【个人理解】什么是Node.js、V8引擎、事件驱动、非阻塞式I/O
    什么是Node.js?Node.js是一个基于ChromeV8引擎的JS运行环境,允许你在服务器上构建你的应用程序。它采用了一套事件驱动、非阻塞式I/O模型,让JS可以运行在服务器上的开发平台。为什么要用Node.js?为什么现在主流前端框架Vue、React等都需要基于Node环境进行开发呢?基本原因1:不基......