TypeScript 出现 Go 和 Rust的 错误? 没有Try/Catch?( 三 )


听起来可能很难,但事实并非如此 。您很快就会开始意识到,代码中几乎所有的 Promise 都可能会抛出错误,而同步函数也会抛出错误,您知道它们,但它们并不多 。
不过,您可能会问,值得吗? 我们认为是的,而且它在我们的团队中运行得很好:) 。当您查看更大的服务文件时,任何地方都没有 try/catch,每个错误都在出现的地方进行处理,具有良好的逻辑流程……它看起来不错 。
以下是使用 SvelteKit Formaction 的真实示例:
export const actions = {createEmail: async ({ locals, request }) => {const end = perf(“CreateEmail”);const form = await safe(request.formData());if (!form.success) {return fail(400, { error: form.error });}const schema = z.object({emailTo: z.string().email(),emailName: z.string().min(1),emailSubject: z.string().min(1),emailhtml: z.string().min(1),}).safeParse({emailTo: form.data.get("emailTo"),emailName: form.data.get("emailName"),emailSubject: form.data.get("emailSubject"),emailHtml: form.data.get("emailHtml"),});if (!schema.success) {console.error(schema.error.flatten());return fail(400, { form: schema.error.flatten().fieldErrors });}const metadata = https://www.isolves.com/it/cxkf/yy/js/2023-09-07/createMetadata(URI_GRPC, locals.user.key)if (!metadata.success) {return fail(400, { error: metadata.error });}const response = await new Promise>((res) => {usersClient.createEmail(schema.data, metadata.data, grpcSafe(res));});if (!response.success) {return fail(400, { error: response.error });}end();return {email: response.data,};},} satisfies Actions;这里有几点需要指出:

  • 我们的自定义函数 grpcSafe 帮助我们处理 gGRPC 回调 。
  • createMetadata 在内部返回 Safe,所以我们不需要包装它 。
  • zod 库使用相同的模式:) 如果我们不进行 schema.success 检查,我们就无法访问 schema.data 。
是不是看起来很干净呢? 所以尝试一下吧! 也许它也非常适合您:)
谢谢阅读 。
附: 看起来很相似?
f, err := os.Open(“filename.ext”)if err != nil {log.Fatal(err)}// do something with the open *File f const response = await safe(fetch(“https://example.com"));if (!response.success) {console.error(response.error);return;}// do something with the response.data
【TypeScript 出现 Go 和 Rust的 错误? 没有Try/Catch?】


推荐阅读