有沒有什麼辦法來定義一個函數顯式拋出,顯然任何函數都會拋出錯誤。但是我想明確地定義一個函數被設計爲拋出並且可能不會返回任何值。Flowtype函數可以拋出錯誤
async function falseThrow (promise: Promise<any>, error): any {
let value: any = await promise
if (!value) throw error
return value
}
有沒有什麼辦法來定義一個函數顯式拋出,顯然任何函數都會拋出錯誤。但是我想明確地定義一個函數被設計爲拋出並且可能不會返回任何值。Flowtype函數可以拋出錯誤
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
是Error
或string
,因此撥打trim
不是安全操作。
這是javascript @Teemu – ThomasReggi
@ThomasReggi默認情況下,Javascript沒有類型註釋。 Teemu:他們正在使用Flowtype,一種靜態類型檢查器,它允許您向JS添加類型註釋。 –
@MikeC意識到這一點,它是流型。 – ThomasReggi