Dart 处理 future 的方法

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

为什么首选第二个?

最佳答案

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

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

IIRC,这在截屏视频中进行了解释。

关于Dart 处理 future 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16591646/

相关文章:

flutter - 如何在Flutter中从IP摄像机下载图像

flutter - 在构建期间调用setState()或markNeedsBuild()-Flutter

flutter - 为什么 FutureBuilder 会被多次调用?

flutter - 将 List<String> 转换为 List<Map<String,dynamic>>

firebase - 获取具有等于特定字符串的字段的 Firestore 文档

dart - 如何观察dart语言中的简单变量

flutter 'owner!._debugCurrentBuildTarget == this' : is not true. #87

android - 显示周数/日历周

Flutter 定位包无法在后台运行

flutter - 如何在列中使用 FractionallySizedBox?