Dart处理期货的方式

Ots*_*lal 4 dart

我看过Dart的截屏视频Futures以及如何处理它们.它说有两种处理Futures混合同步代码的方法.这是示例代码:

import 'dart:async';

Map sanitizeParams(Map p) {/*.....*/}
Future sendToServer(Map p) {/*.....*/}

Future sendParams(Map params) => sendToServer(sanitizeParams(params));
Run Code Online (Sandbox Code Playgroud)

以上是不太喜欢的方式,这里的代码更好(根据制作截屏视频的方式):

import 'dart:async';

Map sanitizeParams(Map p) {/*.....*/}
Future sendToServer(Map p) {/*.....*/}

Future sendParams(Map params) => 
  new Future.value(params)
    .then(sanitizeParams)
    .then(sendToServer);
Run Code Online (Sandbox Code Playgroud)

为什么第二个首选?

Zde*_*vic 5

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

更重要的原因是,如果sanitizeParams抛出异常,则sendParams不会返回未来,而是抛出,这使得用其他期货更难以组合.第二个例子通过首先使参数可用作Future(Future.value)然后在其上链接其他函数来避免这种情况.

IIRC,这是在截屏视频中解释的.

  • 我会说错误处理是使用后者的唯一原因.可读性一如既往地具有争议性. (2认同)