我看到关于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);
为什么第二个首选?
答案 0 :(得分:5)
第一个原因是可读性:sanitizeParams
需要在sendToServer
之前发生,但它以不同的顺序读取,最好在使用期货时避免使用。
更重要的原因是,如果sanitizeParams
抛出异常,那么sendParams
将不会返回未来,而是投掷,这使得用其他期货更难以组合它。第二个例子通过首先将参数作为Future(Future.value
)提供,然后在其上链接其他函数来避免这种情况。