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);

为什么首选第二个?

4

1 回答 1

5

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

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

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

于 2013-05-16T17:08:51.113 回答