npm 包 @varlog/continuation-local-storage 使用教程

简介

在 Node.js 中,我们常常面临的问题是如何在异步处理中传递上下文 contex. 为此,有些库会提供一些解决方案:比如 cls-hooked , async-local-storage 等等,其中较为流行的一个便是 continuation-local-storage (CLS) 。其中 @varlog/continuation-local-storage 是 CLS 的一个扩展。本文将为大家介绍 @varlog/continuation-local-storage 的使用教程。

安装

你可以使用 npm 安装 @varlog/continuation-local-storage

--- ------- ------ ----------------------------------

使用

像其他 npm 包一样使用

你可以像使用其他 npm 包一样引入:

--- --- - ----------------------------------------------

使用该包默认返回一个 cls.Namespace 实例。如果你是在控制台或浏览器内运行该包,因为浏览器和控制台不支持异步本地存储,你可以单独使用 cls-localstorage 包代替。

创建新的存储实例

你可以通过以下方法来创建新的存储实例:

--- --- - ----------------------------------------------
--- --- - -----------------------------------

在命名空间中运行函数

当你使用 CLS 时,你需要将异步的执行内容放入命名空间中,以保证异步操作有正确的本地存储上下文。

比如以下代码:

--- --- - ----------------------------------------------
--- --- - -----------------------------------
---------- -- -
  ---------------- -----------

  ------------- -- -
    ------------------------------
  -- ------
---

该代码会打印出 myValue。函数 nsp.run() 会将该函数中的所有操作都放在名为 myNamespace 的命名空间中。

在子函数中使用相同的命名空间

如果你需要在子函数中使用相同的命名空间,你可以通过如下代码相应地操作:

--- --- - ----------------------------------------------
--- --- - -----------------------------------

-------- ---------- -
  ------------------------------
-

---------- -- -
  ---------------- -----------
  -----------
---

你可以在子函数中使用 nsp.get('myKey') 调用同一命名空间中的值。

嵌套命名空间

当你需要在代码中嵌套命名空间时,你可以使用如下方案:

--- --- - ----------------------------------------------
--- ---- - ----------------------------
--- ---- - ----------------------------

----------- -- -
  --------------- -------------------
  
  ----------- -- -
    ----------------------------- -- -----------------
  ---
---

上述代码中,我们实例化了两个名为 nsp1nsp2 的命名空间。我们在内部嵌套,在 nsp1 中执行一个函数,这个函数中又在 nsp2 命名空间中执行了一个函数。在 nsp2 命名空间中,我们读取了父命名空间 nsp1 中的值。我们可以像这样嵌套多个自定义CL命名空间。

自动绑定

cls 将自动包装一个函数以自动传递上下文:

--- --- - ----------------------------------------------
--- --- - ----------------------------------------
---------- -- -
  ----- ---- - ------------------------- -
    -------------------------------------------
  ---

  ------------
---

你可以传递任意数量的参数和回调函数到中间件函数中。cls 将自动传递上下文和参数。

Async Hooks

cls 实例提供了三种异步钩子(即在异步函数调用期间自动将上下文绑定到回调函数)。

Timeout

你可以使用 setTimeoutsetInterval 函数。timeout 钩子会自动拦截 setTimeoutsetInterval 中的回调函数,并将其添加到命名空间。以下是使用 timeout 钩子的示例:

----- --- - ----------------------------------------------
----- --- - ----------------------------------------
---------- -- -
  ------------- -- -
    -- -- -----
    -------------------------------
  -- ------
---

----------------- -------

timeout 钩子会将 setInterval 函数中的方法也绑定到当前命名空间。例如:

----- --- - ----------------------------------------------
----- --- - ----------------------------------------

---------- -- -
  -------------- -- -
    ---------
    -------------------------------
  -- ------
---

----------------- -------

Event Handlers

你也可以连接事件,把所有事件回调函数绑定到当前 CLS 命名空间。以下是使用 event handler 钩子的示例:

----- --- - ----------------------------------------------
----- --- - ----------------------------------------

---------- -- -
  ----- ------ - ----------------------- ---- -- ----

  -- --------------------
  ------------------------

  ------------------- -------------
---

-- ------------------
------------- -- -
  ----- --- - -------------------------------------
  ---------------------------- -------------------
-- ------

----------------- -------

http.createServer() 调用中插入 nsp.bindEmitter(server),可以将该事件回调函数绑定到命名空间中,在回调函数的 body 中,你可以访问命名空间中的任意变量。在当前 CLS 命名空间的范围内,我们可以为单个请求设置上下文。当然,在这种情况下,我们可以在进程范围内管理多个请求。

Promises

你可以将剪切 Promise 对象的 thenable 函数并将上下文绑定到 handler 上。

----- --- - ----------------------------------------------
----- --- - --------------------------------------

---------- -- -
  ----- ------- - -------------------

  -------------------- -- -
    -- ---- -- ---- --- ------- ----- -- --- ------- -------------
    -----------------------------------------

    ---------------- ---

    -------------------- -- -
      -----------------------------------------
    ---
  ---

  ---------------- ---
---

结论

@varlog/continuation-local-storage 是一个相对易于使用的 cls 包。 通过本文介绍的使用教程,应该可以方便地在应用中使用 CLS。 除非你已经有一套解决方案来处理上下文,否则硬编码上下文是有风险的。维护 CLS 上下文应该成为一个高优先级任务。

参考:

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60066b5551ab1864dac66a19


猜你喜欢

  • npm 包 ngx-log-filter 使用教程

    什么是 ngx-log-filter ngx-log-filter 是一个 Angular 模块,用于过滤并输出应用中打印的日志信息。它可以帮助开发者更方便地调试应用程序,查看特定级别、模块或关键字的...

    3 年前
  • 使用 tinypng-unlimited-cli 压缩图片

    介绍 在前端开发过程中,经常需要使用图片作为页面的展示元素。但高清图片过大,加载速度慢,影响用户体验。因此,压缩图片成为了必不可少的环节之一。tinypng-unlimited-cli 是一个基于 t...

    3 年前
  • npm 包 push-notify-patched 使用教程

    简介 push-notify-patched 是一个 Node.js 库,用于向移动设备发送推送通知。它与 Apple 和 Google 的推送通知服务 API 兼容,可以直接使用 API 来发送通知...

    3 年前
  • npm 包 wx-html-complier-k 使用教程

    在小程序开发中,我们经常会遇到需要将富文本内容渲染到小程序中的情况。而小程序原生并不支持直接渲染富文本,因此我们可以选择使用第三方的一个 npm 包 wx-html-complier-k 来进行解析并...

    3 年前
  • npm 包 yandex-predictor 使用教程

    简介 yandex-predictor 是一个流行的 npm 包,它可以帮助开发人员通过 Yandex 的自然语言处理工具获取单词、短语和句子的推测结果。本文将详细介绍如何在前端应用程序中使用 yan...

    3 年前
  • npm 包 @kingjs/descriptor.normalize 使用教程

    简介 在前端开发中,我们经常需要对数据进行处理,其中很多数据的结构是相似的,但却存在细微的差别。在这种情况下,使用 @kingjs/descriptor.normalize 这个 npm 模块,可以有...

    3 年前
  • npm 包 egg-rules 使用教程

    在 Web 开发中,后端需要对输入的数据进行校验和过滤,以保证数据的有效性和安全性。而 Egg.js 框架提供了一种非常方便的方式来处理这个问题:egg-rules 包。

    3 年前
  • npm包 @wepg/dom 使用教程

    前言 对于前端开发人员而言,NPM包是非常常见和必不可少的工具之一。NPM包是指用于Node.js和浏览器端JavaScript的库和工具。而本篇文章将介绍一个名为@wepg/dom的集成度较高的NP...

    3 年前
  • npm 包 grid-layout-utils 使用教程

    在前端开发中,经常需要使用到网格布局,以便在网站页面中快速布局并排列元素。而使用传统的 CSS 格子化布局可能会出现很多不足,于是为了解决这个问题,我们可以使用 npm 包 grid-layout-u...

    3 年前
  • npm 包 react-d3-bubble 使用教程

    前端开发使用 React 和 D3 常常需要通过插件库对 D3 的功能进行拓展。其中一个常用的 npm 包是 react-d3-bubble,它可以帮助你快速创建漂亮的气泡图。

    3 年前
  • npm 包 bitbar-docker-ps 使用教程

    简介 bitbar-docker-ps 是一款 Node.js 的 npm 包,可以帮助开发者快速查看本地运行的 docker 容器信息。该 npm 包已经在 GitHub 开源,使用者可以自由下载和...

    3 年前
  • npm 包 @synaptiv/kinesis-streams 使用教程

    前言 @synaptiv/kinesis-streams 是一个 Node.js 应用开发中常用的 npm 包,用于连接亚马逊 Kinesis 流以及像 AWS Lambda,Kinesis 客户端等...

    3 年前
  • npm 包 react-native-reactandroid-woogie 使用教程

    随着移动应用的普及,React Native 成为了构建跨平台 App 的首选技术之一。但是,在构建移动应用时,往往需要调用 Android 原生模块,这就需要使用到一些 React Native 的...

    3 年前
  • npm 包 webpack-alioss2-plugin 使用教程

    背景 随着互联网技术的不断进步,前端开发也越来越复杂。在前端开发中,有很多技术工具是我们必不可少的。其中,Webpack 是目前最流行的前端打包工具之一,常常被用来打包、压缩、优化前端代码。

    3 年前
  • npm 包 dragossdk-node 使用教程

    前言 随着前端技术的不断发展,越来越多的开发工具被开发出来,尤其是 npm 上的包。在这些包中,dragossdk-node 是一款非常实用的 npm 包,它为前端开发人员提供了丰富的工具和方法,可以...

    3 年前
  • npm 包 react-native-camera-ios 使用教程

    react-native-camera-ios 是一款前端开发中使用广泛的 npm 包。如果你正在寻找一款易于使用且功能强大的相机组件,那么 react-native-camera-ios 绝对是一个...

    3 年前
  • npm 包 easy-mock-client 使用教程

    在前端开发过程中,模拟数据和接口是非常重要的。easy-mock 是一个非常不错的在线模拟接口平台,它提供了非常简单方便的接口定义、数据模拟、数据导入/导出等功能。

    3 年前
  • npm 包 @fe2345/inspect-commit 使用教程

    前言 在现代前端开发中,代码的提交变得越来越频繁而且大部分时间是团队合作完成的。在这样的环境下,维护良好的 commit 记录变得非常重要,因为它关系到代码质量、开发进展和团队协作等方面。

    3 年前
  • npm 包 wordy-id-cli 使用教程

    在前端开发的过程中,常常会遇到需要生成伪造、随机或唯一的 ID 的情况,而这个过程可能会显得比较复杂和耗费时间。幸运的是,有一个 npm 包叫做 wordy-id-cli,可以帮助我们迅速生成各种不同...

    3 年前
  • npm 包 id3-tree-builder 使用教程

    前言 在前端领域中,我们经常需要处理音频文件的元数据信息,例如歌曲名、艺术家、专辑、时长等等。而这些元数据信息在音频文件中以 ID3 标签(IDentification3)的方式存在。

    3 年前

相关推荐

    暂无文章