2013-05-16 62 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我同意 - 这正是我在观看截屏视频时的反应,但我不想太过分 –