until-async新手教程:如何用[error, data]元组优雅处理async/await错误(完整指南)
until-async新手教程如何用[error, data]元组优雅处理async/await错误完整指南【免费下载链接】until-asyncGracefully handle Promises using async/await without try/catch.项目地址: https://gitcode.com/gh_mirrors/un/until-asyncuntil-async是一个轻量级 JavaScript 工具库教你如何用[error, data]元组优雅地处理async/await中的错误完全告别繁琐的try/catch包裹。本文面向新手5 分钟带你从零上手这个 Promise 错误处理神器。为什么需要 until-async——告别繁琐的 try/catchasync/await让异步代码读起来像同步代码但它有一个小痛点没有内置的错误处理 API。一旦某个await抛错整个函数作用域都会中断async function getUser(id) { const data await fetchUser(id) // 这里抛错后面代码全部执行不了 }标准做法是用try/catch包住每个awaitlet data null try { data await fetchUser(id) } catch (error) { console.error(error) }问题在于 每次异步操作都要重复包裹代码冗长 成功逻辑和错误逻辑被拆到不同分支闭包可读性变差 开发者经常忘记加try/catch埋下隐患until-async 的思路把try/catch封装进一个工具函数until让结果以 Node.js 风格的[error, data]元组返回——有错误时error有值、data为null成功时反之。一切都在同一个作用域内完成。5 分钟上手until-async 安装与第一个示例一键安装步骤在终端执行npm install until-async如需从仓库获取源码可执行git clone https://gitcode.com/gh_mirrors/un/until-async第一个示例最简用法import { until } from until-async async function getUserById(id) { const [error, data] await until(() fetchUser(id)) if (error) { return handleError(error) } return data }就一行核心代码const [error, data] await until(...)成功和失败的两种情况都被扁平化到了同一个作用域里。[error, data] 元组是怎么工作的until的返回值是一个二元组tuple规则非常直观场景errordataPromise 成功null解析出的值Promise 失败错误对象null比如await until(() Promise.resolve(123)) // [null, 123] await until(() Promise.reject(new Error(Oops!))) // [new Error(Oops!), null]这个设计在源码 src/index.ts 中只用了短短十几行就实现并定义了UntilResult类型来保证元组结构。为什么传函数而不是直接传 Promise这是新手最常问的问题官方 FAQ 见 README.md。答案是until接收一个函数让你把一整块逻辑视为一个单位函数内任何一步抛错都会被同一个error捕获const [error, data] await until(async () { const user await fetchUser() const normalized normalizeUser(user) const result await saveModel(user, normalized) return result }) if (error) { // 上面任何一步出错都会走到这里 }如果只能传单个 Promise你就得为每一步都套一层until反而更啰嗦。TypeScript 用户必看类型安全的错误处理until对 TypeScript 非常友好返回值被建模为可辨识联合类型discriminated unionimport { until } from until-async interface User { firstName: string age: number } interface UserFetchError { type: FORBIDDEN | NOT_FOUND message?: string } async function getUserById(id: string) { const [error, data] await untilUserFetchError, User(() fetchUser(id)) if (error) { // 这里 error 被推断为 UserFetchError可安全访问 error.type return handleError(error.type, error.message) } // 这里 data 被推断为 User return data.firstName }判断if (error)之后TypeScript 会自动收窄类型错误分支里data一定是null成功分支里error一定是null帮你把空值判断做得滴水不漏。相关的类型测试可以参见src/until.test-d.ts。项目文件速览代码在哪里这个项目结构极其精简非常适合初学者阅读源码src/index.ts—— 核心实现until函数与UntilResult类型定义src/until.test.ts—— 行为测试验证成功/失败两种元组结果src/until.test-d.ts—— 类型测试验证类型推断与联合类型收窄package.json—— 项目元信息当前版本 3.0.2采用 ESM 模块README.md—— 完整文档含 FAQ 与设计动机vitest.config.ts、tsdown.config.ts—— 测试与构建配置新手常见疑问清单Quntil-async 和 try/catch 有什么本质区别A语义等价但until不产生额外闭包成功/失败两条路径共享同一作用域代码更线性。Q它和 Go 语言的if err ! nil有什么相似之处A设计哲学完全一致——把错误作为返回值显式处理而不是靠异常中断控制流这也是它被称为 NodeJS-friendly 的原因。Q库的体积大吗会影响性能吗A核心实现不到 20 行代码纯函数无依赖引入成本几乎为零。小结 一句话总结 until-async用一行until替代每次的try/catch让[error, data]元组成为你处理 async/await 错误的新习惯。上手三步走npm install until-async安装const [error, data] await until(() ...)替换现有 try/catchTypeScript 项目中传入泛型享受完整的类型收窄就这么简单快去改造你的异步代码吧【免费下载链接】until-asyncGracefully handle Promises using async/await without try/catch.项目地址: https://gitcode.com/gh_mirrors/un/until-async创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

用 slack-irc 定制消息外观:头像、用户名格式与表情转换详解

用 slack-irc 定制消息外观:头像、用户名格式与表情转换详解

用 slack-irc 定制消息外观:头像、用户名格式与表情转换详解 【免费下载链接】slack-irc Connects Slack and IRC channels by sending messages back and forth. 项目地址: https://gitcode.com/gh_mirrors/sl/slack-irc slack-irc 是一款免费开源的 Slack …

2026/8/22 15:32:22 阅读更多 →
GG-CNN环境搭建与预训练模型加载:新手完整指南(附2种加载方式)

GG-CNN环境搭建与预训练模型加载:新手完整指南(附2种加载方式)

GG-CNN环境搭建与预训练模型加载:新手完整指南(附2种加载方式) 【免费下载链接】ggcnn Generative Grasping CNN from "Closing the Loop for Robotic Grasping: A Real-time, Generative Grasp Synthesis Approach" (RSS 2018) …

2026/8/22 15:31:22 阅读更多 →
5分钟提交你的第一个PR:office-docs-powershell快速贡献工作流分步详解

5分钟提交你的第一个PR:office-docs-powershell快速贡献工作流分步详解

5分钟提交你的第一个PR:office-docs-powershell快速贡献工作流分步详解 【免费下载链接】office-docs-powershell PowerShell Reference for Office Products - Short URL: aka.ms/office-powershell 项目地址: https://gitcode.com/gh_mirrors/of/office-docs-po…

2026/8/22 15:31:21 阅读更多 →

最新新闻

从零构建AI漫剧:基于Stable Diffusion与ComfyUI的完整工作流指南

从零构建AI漫剧:基于Stable Diffusion与ComfyUI的完整工作流指南

在数字内容创作领域,AI绘画与视频生成技术的结合,正催生出一种名为“AI漫剧”的新兴内容形式。它并非传统意义上的动画或漫画,而是通过AI工具,将静态的AI绘画串联成具有动态效果和叙事性的短片,常用于短视频平台&#…

2026/8/24 10:56:59 阅读更多 →
别再乱蹭免费AI论文工具❗️6大热门工具真实内幕,毕业党必看避坑

别再乱蹭免费AI论文工具❗️6大热门工具真实内幕,毕业党必看避坑

毕业季最大的骗局:免费AI写论文、一键免费降重、不限次数免费查重。很多同学为了省几十块钱,盲目跟风使用各类免费学术工具,结果最后翻车惨重:论文泄露被收录、AI痕迹直接超标、重复率越降越高、内容虚构被导师驳回,甚…

2026/8/24 10:56:59 阅读更多 →
2026年度AI论文工具排行榜[特殊字符]6款主流平台实测对比,定稿降重不踩坑

2026年度AI论文工具排行榜[特殊字符]6款主流平台实测对比,定稿降重不踩坑

2026年高校双检新规全面落地,重复率AIGC人工智能双检测常态化,市面上AI论文工具五花八门,功能参差不齐、风控标准不一、部分工具暗藏泄露与超标隐患。为帮大家精准避坑、高效定稿,结合合规性、精准度、安全性、性价比、全流程适配…

2026/8/24 10:56:59 阅读更多 →
开题一次过✅OKBIYE智能开题报告功能,解决选题空洞、创新点不足、逻辑混乱难题

开题一次过✅OKBIYE智能开题报告功能,解决选题空洞、创新点不足、逻辑混乱难题

毕业论文第一道拦路虎,不是定稿降重,而是开题报告。 很多同学毕业第一步就卡壳:选题没方向、研究内容太空、文献综述像流水账、创新点写不出来、技术路线逻辑混乱。开题反复被导师打回、一遍遍修改打磨,耽误几周进度,…

2026/8/24 10:56:59 阅读更多 →
2026学术合规攻略✅OKBIYE低风险写论文,再也不怕AI超标、学术踩雷

2026学术合规攻略✅OKBIYE低风险写论文,再也不怕AI超标、学术踩雷

现在写论文,最大的难点已经不是写不出内容,而是怎么写才合规、不踩雷、能过审。 2026年各大高校双检常态化,重复率、AIGC痕迹双重审核收紧。很多同学论文内容没问题、查重合格,最后却因为AI机器痕迹过重、句式模板化、改写不规范…

2026/8/24 10:56:59 阅读更多 →
C++模板型别推导:从概念到实战,掌握现代C++核心机制

C++模板型别推导:从概念到实战,掌握现代C++核心机制

1. 从“Hello, World!”到“Hello, Template!”&#xff1a;为什么我们需要关心型别推导&#xff1f;如果你写过C&#xff0c;哪怕只是用std::vector<int>或者std::sort&#xff0c;你其实已经在和模板打交道了。但很多时候&#xff0c;我们只是把它们当作一个“黑盒”来…

2026/8/24 10:55:58 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力&#xff1b;确需渲染 HTML 时&#xff0c;先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述&#xff1a;Windows登录密码的“黑匣子”每次你按下CtrlAltDel&#xff0c;输入密码&#xff0c;然后看到那个熟悉的桌面&#xff0c;这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者&#xff0c;我经常被问到&#xff1a;“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述&#xff1a;AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时&#xff0c;遇到一个典型案例&#xff1a;候选人在视频面试中无意提到竞争对手产品名称&#xff0c;系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →