2016-07-05 11 views
0

方案如何通過避免未來的鏈條作爲返回類型來知道某個未來是否完整?

如果我想從文件中讀取和數據存儲在一張地圖,如果地圖被多次使用的驗證。

我可以做到這一點,而無需將所有使用上述地圖的方法的返回類型更改爲Future?

實施例:

Map metadata = null 
Future readFromFile async { 
.... metadata = await File.readingfromFile(...); 
} 

Future getRegion(..) async { 
    if(metadata == null) { await readFromFile() } 
    return metadata["region"] 
} 

使用上述代碼,如果一個方法(如isValidRegion等),其使用,並需要getRegion(..)來完成,然後isValidRegion的返回類型應轉換爲前景。

Future<bool> isValidRegion(..) async { 
    return ((await getRegionData(...)) != null) 
} 

如果該isValidRegion存在於另一個方法中,那麼它們的返回類型也必須更改爲Future。

Future<String> parse(...) async { 
    .... 
    if(await isValidRegion()) { 
    ... 
    } 
... 
} 

什麼是一種避免這種期貨作爲回報類型的優雅方式?

回答

3

異步執行具有傳染性,您無法從異步恢復到同步執行。

你可以做的是做同步讀取文件,以避免第一個問題(如果這是可能的話,如果你從網絡連接讀取它,這可能是不可能的)。

+2

有一篇關於異步性的傳染性的偉大文章:Bob Nystrom:http://journal.stuffwithstuff.com/2015/02/01/what-c​​olor-is-your-function/。換句話說,是的,這是一個問題,你無能爲力。 – filiph

+0

有趣。感謝您的回覆。 我想知道其他主要圖書館如何處理從文件中讀取並避免傳染性。我可能需要搜索一個並進行調查。 – Eternalcode

相關問題