npm 包 cls-tls 使用教程

简介

cls-tls 是一个用于实现 Node.js 线程安全并且不依赖于 domain 模块的 npm 包。

该包依赖于 Node.js 的新特性:AsyncLocalStorage。AsyncLocalStorage 是 Node.js v12 中引入的封装了已弃用的 AsyncHooks API 的新 API。AsyncLocalStorage 提供了一种简单的机制,用于在异步任务(例如事件回调或 promise)之间共享数据,而不需要与执行上下文之间的任何关联。

通过 cls-tls,我们可以轻松地将上下文数据与异步函数以及其之间的链式调用共享。

安装

在项目根目录下使用 npm 安装 cls-tls:

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

使用

当我们在异步任务中使用 cls-tls 属性时,我们需要创建一个 AsyncLocalStorage 对象。

在使用 AsyncLocalStorage 之前,您需要先调用以下代码,以便为每个异步任务创建自己的 AsyncLocalStorage 对象。

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

接下来,我们可以在异步函数中设置和获取自定义上下文。例如:

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

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

这里我们定义了一个命名空间叫做“your-session”。这个命名空间中有一个键值对 { data: { value: 'this is my context' } }。你可以把这个 data 对象看作是上下文。

当我们在异步任务中调用 session.set 函数时,我们实际上是将一个 key-value 对存储到当前命名空间的存储中。当我们在另一个异步任务中调用 session.get 函数时,我们实际上是从当前命名空间的存储中获取一个 value,根据 key。

这种方式使我们能够轻松地共享我们的上下文数据。

示例

以下是一个示例,演示了如何使用 cls-tls 共享上下文:

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

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

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

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

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

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

运行这个脚本,你会看到以下输出:

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

在这个例子中,我们为每个任务设置了自己的上下文对象(其中包含一个名为“id”的属性)。当任务 A 调用任务 B 时,任务 B 会在自己的上下文中设置一个新的 id 值。之后,任务 C 会按照同样的方式设置新的上下文,等待 3 秒钟,然后结束。

值得注意的是,我们使用了 await 关键字来等待异步函数返回,以确保每个任务都在自己的上下文中正确地设置和获取数据。

结论

cls-tls 是一个非常有用的 npm 包,用于实现 Node.js 线程安全并且不依赖于 domain 模块。它基于 AsyncLocalStorage 的新特性,使我们能够轻松地共享上下文数据,并在异步任务之间传递。这使得 Node.js 应用程序的编写更加容易,而且代码更加清晰易读。

我们希望这篇文章能够帮助您使用 cls-tls,并为您的 Node.js 应用程序的编写提供一些指导和帮助。

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


猜你喜欢

  • npm 包 midi-player-ts 使用教程

    前言 在前端开发中,我们经常需要使用到音频播放功能。而 MIDI 文件作为一种特殊的音频文件格式,其支持的音色种类非常丰富,因此很受前端开发者的青睐。midi-player-ts 是一款 npm 包,...

    3 年前
  • npm 包 redux-ui-tekk 使用教程

    本文将为您介绍一个前端开发中非常实用的 npm 包,即 redux-ui-tekk,以及其使用教程。这个包可以帮助您更高效地开发 redux 项目,并在项目中使用基于组件的用户界面设计。

    3 年前
  • npm 包 sfdx-ez 使用教程

    什么是 sfdx-ez? sfdx-ez 是一个用于 Salesforce 开发的 npm 包,其提供了方便易用的命令行工具,使得 Salesforce 开发更加高效。

    3 年前
  • npm 包 fashion-model-defaults 使用教程

    简介 在前端开发中,经常需要为模型数据设置默认值,逐个手动设置这些默认值是很繁琐的。因此,开发者为了提高开发效率和代码可维护性,经常会使用一些工具库。 其中,npm 包 fashion-model-d...

    3 年前
  • npm 包 react-transition-array 使用教程

    简介 React 是一个流行的前端库,它使得开发者能够快速构建交互式的网页应用程序。然而,对于那些需要处理各种动画效果的开发者来说,React 并不是最佳的选择。这些效果通常涉及到复杂的 DOM 操作...

    3 年前
  • npm 包 buffer.gl 使用教程

    前言 在前端开发中,我们通常会遇到需要对二进制数据进行处理的情况,比如音视频处理、图像处理、数据加密、网络通信等等。而对于二进制数据的处理,我们通常会使用 JavaScript 中的 ArrayBuf...

    3 年前
  • npm 包 img2-loader 使用教程

    当我们进行前端开发时,经常需要使用到图片资源。然而,图片资源通常需要进行压缩、缩放等操作,以达到优化页面加载速度的目的。而 img2-loader 正是一个强大的npm包,可以帮助我们快速高效地处理图...

    3 年前
  • npm 包 karma-backbone-chai 使用教程

    在前端开发中,我们经常会用到各种模块化的工具以及测试工具。karma-backbone-chai 是一个基于 Karma 测试框架的 Javascript 测试运行工具,主要用于测试 Backbone...

    3 年前
  • npm 包 redux-declarative-request-axios 使用教程

    什么是 redux-declarative-request-axios? redux-declarative-request-axios 是一个能帮助前端开发者更加轻松地使用 axios 请求的 np...

    3 年前
  • npm 包 oz_responses 使用教程

    简介 oz_responses 是一个前端的 npm 包,它提供了一些常见的 HTTP 响应状态码和相应的信息。它可以帮助前端开发者更好地理解和处理服务器返回的响应信息。

    3 年前
  • npm 包 pptx2pdf 使用教程

    介绍 pptx2pdf 是一个基于 Node.js 的 npm 包,可以将 Microsoft PowerPoint 文件 (.pptx) 转换为 PDF 文件。它是一个非常实用的工具,适用于各种场景...

    3 年前
  • npm 包 obj23dtiles 使用教程

    前言 obj23dtiles 是一个可以将 obj 格式转换为 3dtiles 格式的 npm 包,3dtiles 是一种用于地图可视化的格式,可用于 web 地图或其他 GIS 的可视化。

    3 年前
  • npm 包 random-numorstr 使用教程

    在前端开发中,我们常常需要生成随机数或随机字符串。为了方便开发,我们可以借助 npm 包 random-numorstr。random-numorstr 是一个基于 Node.js 的随机数和随机字符...

    3 年前
  • npm 包 strict-redux-types 使用教程

    在前端开发中,Redux 是一个广泛应用的状态管理工具。为了保证代码的严谨性和可维护性,我们需要定义 Redux 的 action 和 reducer 的类型。但是,这个过程是较为繁琐且容易出现错误的...

    3 年前
  • npm 包 lets-i18n 使用教程

    在多语言网站或应用程序中,国际化是一个必要而且重要的功能。不同的用户讲不同的语言,因此需要对它们进行翻译,以便让他们更好地理解和使用我们的产品。nmp 包 lets-i18n 提供了一种简单和灵活的方...

    3 年前
  • npm 包 laughview 使用教程

    前言 在前端开发中,经常会使用别人开发的工具或者库来提高开发效率和代码质量。npm 是目前最流行的 JavaScript 包管理器之一,可以方便地搜索、安装、更新、移除各种前端依赖库和工具。

    3 年前
  • npm 包 webpack-emit-http-push 使用教程

    前言 Webpack 是一款非常优秀的项目打包工具,可以将多个 JavaScript 文件打包成一个或多个文件,减少页面的 HTTP 请求,提升页面加载速度,是前端开发必备的工具之一。

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

    在前端开发中,我们经常需要调试代码。而使用 Node.js 进行调试是一种高效的方式。npm 包 bs-node-debug 是一种基于 Chrome DevTools 的 Node.js 调试器,它...

    3 年前
  • npm包bs-promise-router 使用教程

    介绍 bs-promise-router 是一个运行在 Node.js 上的 Promise 风格的轻量级路由库。该库被设计用于简化路由的管理和操作,同时允许你使用 Promise 来协调异步操作。

    3 年前
  • npm 包 gitbook-plugin-page-footer-ex 使用教程

    在前端开发中,我们常常需要为项目添加页脚信息,如版权信息、联系方式等,而 gitbook-plugin-page-footer-ex 就是一个可以帮助我们实现这一功能的 npm 包。

    3 年前

相关推荐

    暂无文章