平时普通的业务逻辑开发中,越来越不想 throw error 了,而是返回空。
比如 swift 中:
func req() async -> String? {
if let foo = try? await SomeAsyncThrowsFunc() {
return foo
}
return nil
}
用到的地方:
Task {
if let val = await req() {
// get the string value
} else {
// somethings up
}
}
下面是使用 throw 的版本:
func req() async throws -> String {
if let foo = try await SomeAsyncThrowsFunc() {
return foo
}
}
用到的地方:
Task {
do {
let val = try await req()
// get the string value
} catch {
// catch the error
}
}
或者直接将错误转换成 Optional 赋值:
if let val = try? await req() {}
平时的业务逻辑没有写的那么完美,如果是写一个标准的库,定义所有的错误类型,遇到情况不对,throw 相对应的错误。但是到业务逻辑调用,函数包裹的越多,可能在中间一层将错误给抹掉,后面再也拿不到正确的错误值了。
所以要想要规范,必须从头到尾规范起来,中间不能有松懈。但是,要偷懒,真的爽。(也承认自己写的不规范)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.