我看到一个关于 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);
为什么首选第二个?
最佳答案
第一个原因是可读性:sanitizeParams
需要在 sendToServer
之前发生但它以不同的顺序读取,在使用 future 时最好避免这种顺序。
更重要的原因是如果sanitizeParams
抛出异常然后 sendParams
不会返回 future 而是抛出,这使得将它与其他 future 组合起来变得更加困难。第二个示例通过首先将参数作为 Future ( Future.value
) 提供,然后在其上链接其他函数来避免这种情况。
IIRC,这在截屏视频中进行了解释。
关于Dart 处理 future 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16591646/