有什么方法可以明确定义函数可以抛出错误,显然任何函数都可以抛出错误。但我想明确定义一个函数被设计为抛出并且可能根本不返回值。
async function falseThrow (promise: Promise<any>, error): any {
let value: any = await promise
if (!value) throw error
return value
}
正如 Nat Mote 在她的回答中强调的那样,无法在流程中对检查的异常进行编码。
但是,如果您愿意稍微更改编码,则可以执行等效操作:
async function mayFail<A, E>(promise: Promise<?A>, error: E): E | A {
let value = await promise
if (!value) {
return error
}
return value
}
现在流程将强制用户处理错误:
const p = Promise.resolve("foo")
const result = await mayFail(p, Error("something went wrong"))
if (result instanceof Error) {
// handle the error here
} else {
// use the value here
result.trim()
}
如果你尝试做类似的事情
const p = Promise.resolve("foo")
const result = await mayFail(p, Error("something went wrong"))
result.trim() // ERROR!
流程会阻止你,因为你还没有检查是否result
is an Error
or a string
,所以调用trim
不是一个安全的操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)