发布了一个用于 JS/TS 异步进程同步执行的库
最近发现不少小伙伴都对文章很感兴趣,所以今天继续给大家介绍文章相关的知识,本文《发布了一个用于 JS/TS 异步进程同步执行的库》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~
我发布了一个名为sync-actions 的库,它允许异步进程在 javascript/typescript 中同步执行。特别是在 typescript 中,您可以以类型安全的方式调用定义的函数。它适用于您想要在您不希望(或不能)标记为异步的函数中执行异步进程的情况。
特征
- 利用 node.jsworker_threads
- 异步进程在子线程中执行,主线程同步等待其完成。
- 类型安全的函数调用
- 在 typescript 中,您可以利用已定义函数的类型信息。
- 作为原生 esm 发布
- 由于不支持 commonjs,它变得简单。
存储库
https://github.com/koyopro/sync-actions
用法
安装
它作为 npm 包发布,因此请使用 npm install 或类似的方式安装它。
npm install sync-actions
基本用法
通过将返回promise对象的异步函数传递给definesyncworker(),您可以定义接口并使用launch()启动工作线程。假设定义工作程序的文件是与其他处理文件分开创建的。
// worker.js import { definesyncworker } from "sync-actions"; export const { actions, worker } = definesyncworker(import.meta.filename, { ping: async () => { // execute asynchronous process, await new promise((resolve) => settimeout(resolve, 1000)); // return the result as a return value return "pong"; } }).launch();
// main.js import { actions, worker } from "./worker.js"; // you can execute asynchronous functions synchronously console.log(actions.ping()); // => "pong" is output after 1 second worker.terminate();
类型安全的函数调用
在 typescript 中,您可以以类型安全的方式调用使用 definesyncworker 定义的函数。
// worker.ts import { definesyncworker } from "sync-actions"; export const { actions, worker } = definesyncworker(import.meta.filename, { // by specifying the types of arguments and return values, type-safe calls are possible add: async (a: number, b: number): promise<number> => { return a + b; } }).launch();
// main.ts import { actions, worker } from "./worker.js"; // Type-safe call actions.add(1, 2); // => 3 (number) // @ts-expect-error actions.add("1", 2); // => Argument of type 'string' is not assignable to parameter of type 'number' worker.terminate();
背景
到目前为止的内容与readme相同,所以我将描述它的创建背景。
我正在开发一个名为 accel record 的 orm。1与一般 orm 不同,accel record 旨在通过同步接口执行 db 访问。2 同步执行 db 访问的部分是通过在以child_process模块启动的子进程中执行异步进程来实现的。3我认为通过使用worker_threads而不是child_process,我可以减少运行时的开销。
accel record 在可用性方面也被设计为类似于 ruby on rails 的 active record,而我未来想要实现的目标之一就是创建一个像 carrierwave 这样的库。 carrierwave允许您在保存记录时将图像保存到外部存储服务(例如aws s3),而要使用accel record来实现这一点,需要同步执行图像上传等异步过程。我希望通过使用worker_threads而不是子进程可以更快地执行这个进程。
所以我曾经寻找过一个使用worker_threads同步执行异步进程的库。我发现了几个库,例如synckit和deasync,但它们都没有按照我的预期工作,所以我决定创建自己的库。从那时起,我就想制作一个可以通过 typescript 以类型安全方式使用的界面。
更多内部细节
- 直到以worker_threads启动的子线程中的异步进程完成为止,使用atomic.wait()阻塞主线程。
- messagechannel 用于线程之间的通信。 synckit的源码对于这部分的实现非常有帮助。
- 当使用worker_threads启动worker时,需要将.ts文件转译为.js。对于这部分,我使用 esbuild。
- 启动 worker 时,我想将转译后的源代码作为字符串传递给 worker 执行,但它在我的环境中无法正常工作。这是我最挣扎的部分。最后,我将文件写在node_modules下,并将其路径传递给worker。这个方法被证明是最稳定的。
-
“accel record”简介:使用 active record 模式的 typescript orm ↩
-
为什么我们为新的 typescript orm 采用同步 api ↩
-
typescript 中的同步数据库访问技术↩
今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

- 上一篇
- Win10怎么优化网络 Win10网络优化设置教程

- 下一篇
- 如何在 JavaScript 中从所有类型的 HTML 输入中检索值
-
- 文章 · 前端 | 22秒前 | object-fit CSSGrid 图像裁剪 图片网格拼贴 object-position
- CSS图片网格拼贴技巧:object-fit精准控制
- 476浏览 收藏
-
- 文章 · 前端 | 2分钟前 |
- async/await如何影响事件循环?
- 123浏览 收藏
-
- 文章 · 前端 | 3分钟前 |
- input标签常用类型及value属性使用方法
- 377浏览 收藏
-
- 文章 · 前端 | 3分钟前 |
- 从ID遍历DOM元素的实用教程
- 480浏览 收藏
-
- 文章 · 前端 | 6分钟前 |
- HTML文档结构解析与打开方式
- 283浏览 收藏
-
- 文章 · 前端 | 7分钟前 |
- HTML用户无效表单样式设置技巧
- 189浏览 收藏
-
- 文章 · 前端 | 9分钟前 |
- Webpack插件功能与使用场景详解
- 385浏览 收藏
-
- 文章 · 前端 | 17分钟前 |
- JS加密方法详解与实战应用
- 194浏览 收藏
-
- 文章 · 前端 | 25分钟前 |
- HTML表格PDF预览实现与嵌入方法解析
- 134浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 511次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 498次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 千音漫语
- 千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
- 176次使用
-
- MiniWork
- MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
- 175次使用
-
- NoCode
- NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
- 178次使用
-
- 达医智影
- 达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
- 185次使用
-
- 智慧芽Eureka
- 智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
- 197次使用
-
- 优化用户界面体验的秘密武器:CSS开发项目经验大揭秘
- 2023-11-03 501浏览
-
- 使用微信小程序实现图片轮播特效
- 2023-11-21 501浏览
-
- 解析sessionStorage的存储能力与限制
- 2024-01-11 501浏览
-
- 探索冒泡活动对于团队合作的推动力
- 2024-01-13 501浏览
-
- UI设计中为何选择绝对定位的智慧之道
- 2024-02-03 501浏览