Promise.all() 的一个棘手的陷阱和解决方案

本文旨在描述使用 Promise.all() 时经常出现的棘手情况,以及该问题的简单解决方案。 Promise.all() 的 MDN 页面提供了该函数的以下描述: Promise.all() 静态方法采用可迭代的 Promise 作为输入…… 本文旨在描述使用时经常出现的棘手情况 Promise.all(),以及解决此问题的简单方法。 上下文 MDN 页面 Promise.all() 提供了该函数的以下描述: 这 Promise.all() 静态方法接受可迭代的 Promise 作为输入并返回一个 承诺。 当所有输入的 Promise 都满足时(包括传递空的可迭代对象时),返回的 Promise 就会满足,并带有一个满足值数组。 当任何输入的 Promise 拒绝时,它会拒绝,并给出第一个拒绝原因。 Promise.all() 于 2015 年发布的 ECMAScript 第六版中引入,当 Promise 首次作为语言中的内置机制添加时,但它们之前已经通过使用像 蓝鸟。 ECMAScript 2020,第11版,推出 Promise.allSettled(),其行为略有不同: 这 Promise.allSettled() 静态方法接受可迭代的 Promise 作为输入并返回一个 承诺。 当所有输入的承诺都解决时(包括传递空的可迭代对象时),返回的承诺就会履行,并带有描述每个承诺结果的对象数组。 最后,随着 async, Promise.all() & […]

从多到一:将 JavaScript 代码移至 monorepo

我们需要单一仓库吗? 当我第一次加入 Aha! 时,我对它的结构如此之好感到惊讶 工程入职 计划是。 我花了几周的时间来了解所有团队并学习我们系统的各个部分。 当时我没有意识到这些入职对话给我带来的不仅仅是基本的技术知识。 他们打开了一扇通向完整开发工作流程的大门。 当我看到我们的 Web 组件库中一个简单的样式更改需要两个拉取请求和半小时时,我知道存在一个不寻常的痛点。 我们所有的产品都存在于一个 Rails 存储库中,因此可以公平地说,我们运行的是 多产品单体 共享业务逻辑、UI 片段等。 这使得无论产品如何,都可以轻松快速地开发新功能。 相比之下,我们的许多 JavaScript 代码过去都是作为私有 npm 包存在的。 尽管拥有私有包对于在许多地方重用代码非常有用,但如果您主要在一个地方使用它们,那么它不是最好的选择 – 因为它会给流程增加太多开销。 在我们的例子中,我们只将大部分包拉入我们的 Rails 单体应用中。 在啊哈! 我们是 中断驱动,工程团队付出了巨大的努力 创建工具 它可以帮助我们完成工作,同时能够轻松切换环境并解决错误,协助队友,或者在需要时做其他事情。 我们的私有 npm 包的工作过程根本不是中断驱动的。 如果您必须处理我们的一个私有包,您知道这将花费大量时间(即使它像我们的 Web 组件库中的样式更改一样简单)。 尽管可能会变得乏味,但手动过程非常简单: 克隆包的存储库。 使用正确的节点版本安装 npm 依赖项。 启动本地开发环境。 对代码库进行更改。 在包的本地开发环境中测试更改。 使用 yalc 将更改链接到我们的 Rails 应用程序。 在我们的本地应用程序环境中测试更改。 […]

主要浏览器供应商宣布推出 Interop 2024 以解决不兼容问题

浏览器制造商 Apple、Google、Microsoft 和 Mozilla 以及咨询公司 Bocoup 和 Igalia 最近宣布了 Interop 2024,这是一个促进网络浏览器互操作性的项目。 Interop 2024 包括 17 个重点领域,涉及布局、样式、用户交互问题等。 Google 的 Rachel Andrew 对 Interop 的目标解释如下: Interop 的核心是一系列全面的测试和基准测试,旨在根据我们对网络标准的共同承诺评估各个浏览器的合规性。 最终,Interop 致力于消除浏览器之间的不一致,并在行业内形成统一的愿景。 在微软方面,- 帕特里克·布罗塞特 和 丹·克拉克 评论道: [Interop 2024] 是一个多年跨组织项目的延续 [that] 承认 Web 开发人员的痛点,旨在使 Web 平台更易于使用。 我们通过实现经常请求的功能并修复最重要的跨浏览器兼容性问题来做到这一点。 有兴趣的读者可以访问以下网站探索 17 个选定的重点领域: 互操作 2024 仪表板。 仪表板详细介绍了功能和所需的工作,以及每个浏览器的当前分数。 读者还可以查看 Interop 2023 仪表板,了解去年的重点领域并了解所取得的进展。 Interop 2024 […]

在 JavaScript 中验证 UTF-8 字符串的速度有多快? – 丹尼尔·勒米尔的博客

当您从磁盘或网络恢复文本内容时,您可能希望它是 UTF-8 格式的 Unicode 字符串。 这是最常见的格式。 不幸的是,并非所有字节序列都是有效的 UTF-8,并且接受无效的 UTF-8 而不验证它是一个安全风险。 如何在 JavaScript 运行时验证 UTF-8 字符串? 您可以使用 valid-8 模块: import valid8 from “valid-8”; if(!valid8(file_content)) { console.log(“not UTF-8”); } 另一种推荐的方法是利用 TextDecoder 可以在出错时抛出异常的事实: new TextDecoder(“utf8”, { fatal: true }).decode(file_content) 或者您可以使用 isUtf8 函数,它是 Node.js 和 Bun 的一部分。 import { isUtf8 } from “node:buffer”; if(!isUtf8(file_content)) { console.log(“not UTF-8”); } 他们如何比较? […]

2023 年编程语言将转向 C#

TIOBE 软件已声明 C# 2023 年的编程语言 基于其长期流行指数。 TIOBE 编程社区指数根据搜索引擎量显示编程语言的逐年趋势。 2024 年 1 月,排名前三的编程语言是 Python、C 和 C++。 然而,在 TIOBE 的专有排名系统中,它们在 2023 年都失去了受欢迎程度。 2023年1月至2024年1月期间的其他主要变化如下: C# 同比增长最快,达到 +1.43%。 JavaScript 从第 7 位上升到第 6 位。 PHP 从第 10 位上升至第 7 位。 Visual Basic 从第 6 位跌至第 8 位。 SQL 从第 8 位跌至第 9 位。 Scratch 从第 20 位大幅上升至第 10 位,进入前 […]

HTML 呼吸描记器

第 1 臂速度 (RPM): –+偏移角(度): –+第 1 臂长度: –+第 2 臂长度: –+ 第 1 臂速度 (RPM): –+第 1 臂长度: –+第 2 臂长度: –+第 2 臂延伸: –+ALT + 单击/Enter 强制立即重画SHIFT + 单击进行微调 螺旋描记器图像: 下载PNG提交您的图纸: 上传数据只能上传干净的图纸:先重新绘制。如果需要,请使用 500 倍加速。 关于 首先,我想制作一个乐高螺旋记录仪,但我无法在孩子们在我身边的情况下完成它,所以我用 HTML 和 JS 制作了它,并使用 Canvas 元素在其上绘图。 就像 齿轮发电机,我无法停止它的工作,最后这里有一个不太用户友好,但安静的好小工具,它可以生成漂亮的图画。 什么是什么? 开始/停止:开始/继续绘图而不擦除画布,然后停止(暂停)。 重画:在新画布上绘制。 减速/加速:重新计算手臂旋转速度以改变绘图速度,通常会产生更亮的线条。 放大/缩小:重新计算手臂尺寸和位置参数以更改绘图尺寸。 随机发生器:生成随机参数并开始在新画布上绘图。 A是最简单的,B是最复杂的。 想象一下 C […]