Dart处理期货的方式

时间:2013-05-16 15:30:33

标签: dart

我看到关于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);

为什么第二个首选?

1 个答案:

答案 0 :(得分:5)

第一个原因是可读性:sanitizeParams需要在sendToServer之前发生,但它以不同的顺序读取,最好在使用期货时避免使用。

更重要的原因是,如果sanitizeParams抛出异常,那么sendParams将不会返回未来,而是投掷,这使得用其他期货更难以组合它。第二个例子通过首先将参数作为Future(Future.value)提供,然后在其上链接其他函数来避免这种情况。

IIRC,这在截屏视频中有解释。