免费做网站教程,wordpress头部文字改不了,营销型网站推广方式的论文,做网站杭州傲视信息作为 Dart 开发人员#xff0c;我们对异步编程和 Futures 的强大功能并不陌生。过去#xff0c;当我们需要同时等待多个 future 时#xff0c;我们依赖 Future.wait([]) 方法#xff0c;该方法返回一个 ListT。然而#xff0c;这种方法有一个显着的缺点#xff1…作为 Dart 开发人员我们对异步编程和 Futures 的强大功能并不陌生。过去当我们需要同时等待多个 future 时我们依赖 Future.wait([]) 方法该方法返回一个 ListT。然而这种方法有一个显着的缺点我们必须手动将结果转换为所需的类型这可能会导致代码冗长且容易出错。
final results await Future.wait([Future.value(andrew),Future.value(1984),
]);
expect((results[0] as String).toUpperCase(), ANDREW);
expect((results[1] as int).isNegative, false);幸运的是有一个更优雅的解决方案它利用了扩展和 async/await 语法的强大功能 zipWith 扩展方法。
介绍 zipWith
zipWith 扩展方法允许您将两个 future 的结果组合成一个类型化元组从而无需手动转换。它的工作原理如下
final (name, year) await Future.value(andrew).zipWith(Future.value(1984));
expect(name.toUpperCase(), ANDREW);
expect(year.isNegative, false);在此示例中我们将合并两个 future 的结果一个解析为字符串 “andrew”另一个解析为整数 1984。该 zipWith 方法返回一个元组 (T, T2) 其中 T 是第一个未来的类型 T2 是第二个未来的类型。
但是等等还有更多您甚至可以链接多个 zipWith 调用来组合三个或更多 future 的结果
final ((name, year), married) await Future.value(andrew).zipWith(Future.value(1984)).zipWith(Future.value(false));
// ...
expect(married, false);在此示例中我们将三个 futures 组合在一起从而生成一个嵌套元组 ((T, T2), T3) 。
引擎盖下
那么zipWith 是如何施展魔法的呢下面是实现方法
extension FutureZipXT on FutureT {Future(T, T2) zipWithT2(FutureT2 future2) async {late T result1;late T2 result2;await Future.wait([then((it) result1 it),future2.then((it) result2 it)]);return (result1, result2);}
}结束语
通过利用 zipWith 的强大功能您可以在处理多个异步操作时编写更简洁、更具表现力的代码。无需再手动转换或摆弄 Listdynamic - 只需简洁、类型安全的元组使您的代码更易于阅读和维护。
因此下次当您发现自己要兼顾多个 future 时请尝试一下 zipWith体验 Dart 中简化异步编程的乐趣。