ECMAScript Try 运算符
> [!提示] > 您今天就可以测试该提案的运行时方面及其人体工程学!从 NPM 安装我们的参考“Result”类实现: > > [`npm 安装尝试`](https://www.npmjs.com/package/try)
````js const 结果 = 尝试 JSON.parse(输入) // 可以解构 const { ok, error, value } = 尝试等待 fetch("/api/users") const [ok, fetchErr, res] = 尝试 fs.readFileSync("data.txt") ````
该提案解决了管理多个通常嵌套的“try/catch”块的人体工程学挑战,这些块是处理可能在不同点失败的操作所必需的。 try 块不必要地将受保护的代码包含在块中。这通常会阻止直接的“const”分配模式,并且会降低可读性并通过额外的嵌套阻碍静态分析。 `catch (error) {}` 分支通常是控制流发散发生的地方,而成功的路径通常只是分配一个变量。 解决方案是添加一个“try <表达式>”运算符,其语法类似于“await <表达式>”,它捕获执行其表达式时发生的任何错误,并将其作为值返回给调用者。 JavaScript 没有现有的等效项来进行不使用执行器回调参数的就地异常到值的转换,这会强制代码跨越函数边界并创建闭包。
- [状态](#status) - [作者](#authors) - [尝试/捕获还不够](#trycatch-is-not-enough) - [必须维护`try...catch`的规则](#the-rules-of-trycatch-must-be-maintained) - [需要一个“ok”值](#the-need-for-an-ok-value) - [无扁平化](#无扁平化) - [Caller vs Callee:直接返回结果?](#caller-vs-callee-return-result-directly) - [尝试运算符](#try-operator) - [表达式在独立的 `try/catch` 块中求值](#expressions-are-evaluated-in-a-self-contained-trycatch-block) - [可以内联](#can-be-inlined) - [可以使用任何有效的表达式](#any-valid-expression-can-be-used) - [`await` 不是特殊情况](#await-is-not-a-special-case) - [语句不是表达式](#语句不是表达式) - [从不抛出](#never-throws) - [对象文字需要括号](#parenthesis-required-for-object-literals) - [无效操作](#void-operations) - [优先级和解析注释](#precedence-and-parsing-notes) - [锋利边缘和危险](#sharp-edges-and-hazards) - [结果类](#结果类) - [参考实现](#reference-implementation) - [实例结构](#instance-struct) - [简短形式](#short-forms) - [手动创建](#manual-creation) - [`try()` 静态方法](#try-static-method) - [互操作和领域](#interop-and-realms) - [该提案不旨在解决什么问题](#this-proposal-does-not-aim-to-solve) - [类型安全错误](#type-safe-errors) - [自动错误处理](#automatic-error-handling) - [为什么不先`数据`?](#why-not-data-first) - [卡斯