2013-05-16 133 views
4

我看到一個關於Futures的Dart屏幕錄像以及如何處理它們。它表示有兩種方式處理與同步代碼混合的一些Futures。這是示例代碼:(根據誰做的截屏的一個)飛鏢方式處理期貨

import 'dart:async'; 

Map sanitizeParams(Map p) {/*.....*/} 
Future sendToServer(Map p) {/*.....*/} 

Future sendParams(Map params) => sendToServer(sanitizeParams(params)); 

以上是少首選方式,而這裏是更好的代碼:

import 'dart:async'; 

Map sanitizeParams(Map p) {/*.....*/} 
Future sendToServer(Map p) {/*.....*/} 

Future sendParams(Map params) => 
    new Future.value(params) 
    .then(sanitizeParams) 
    .then(sendToServer); 

爲什麼是第二一個首選?

回答

5

第一個原因是可讀性:sanitizeParams需要在sendToServer之前發生,但它是按不同順序讀取的,這在使用期貨時最好避免。

更重要的原因是,如果sanitizeParams引發異常,那麼sendParams將不會返回未來,而是拋出未來,這使得與其他期貨合併更加困難。第二個例子通過首先將參數提供爲未來(Future.value)然後鏈接其他功能來避免這種情況。

IIRC,這在屏幕錄像中有所解釋。

+2

我會說錯誤處理是使用後者的唯一原因。可讀性一如既往。 –

+0

+1 @KaiSellgren我同意 - 這正是我在觀看截屏視頻時的反應,但我不想太過分 –