2016-11-15 67 views
1

有沒有什麼辦法來定義一個函數顯式拋出,顯然任何函數都會拋出錯誤。但是我想明確地定義一個函數被設計爲拋出並且可能不會返回任何值。Flowtype函數可以拋出錯誤

async function falseThrow (promise: Promise<any>, error): any { 
    let value: any = await promise 
    if (!value) throw error 
    return value 
} 
+0

這是javascript @Teemu – ThomasReggi

+2

@ThomasReggi默認情況下,Javascript沒有類型註釋。 Teemu:他們正在使用Flowtype,一種靜態類型檢查器,它允許您向JS添加類型註釋。 –

+0

@MikeC意識到這一點,它是流型。 – ThomasReggi

回答

0

流不支持檢查的異常。它不會試圖模擬哪些函數可能拋出或者可能拋出什麼樣的錯誤。

3

正如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! 

流會阻止你,因爲你沒有檢查是否resultErrorstring,因此撥打trim不是安全操作。