听起来可能很难,但事实并非如此 。您很快就会开始意识到,代码中几乎所有的 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
这里有几点需要指出:
- 我们的自定义函数 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?】
推荐阅读
- 彻底理解什么是同步和异步!
- K8s 多集群实践思考和探索
- C++进阶:纯虚函数和抽象类的奥秘
- 梁靖琪和儿子开心为老公庆生晒温馨合影
- 结婚7年未育,47岁陈紫函聊晚年生活,戴向宇:老了去寺庙当和尚
- 钓鲫鱼和鲤鱼混养塘的5个要领,鲫鲤都爆护
- 碧玉盆栽养殖方法和技术 碧玉盆栽养殖方法
- 梦见死人和棺材是什么兆头 梦见死人和棺材什么预兆
- 红鲫鱼的养殖方法 红鲫鱼的养殖方法和注意事项视频
- 扫尘的风俗和意义 扫尘的风俗和意义作文