Dart Future 使用(重点)

Dart 的异步对象,类似于 Javascript 中的 Promise

  1. Future 表示一个异步操作返回的结果;
  2. Future 是一个泛型类;
  3. Future 实现异步的原因是通过 dart 的 event loop,这里不过多赘述。

基本使用

import 'package:http/http.dart' as http;

Future getIp() {
  final url = 'https://httpbin.org/ip';
  return http.get(url).then((res) {
    return res.body;
  });
}

void main() {
  getIp().then((res) {
    print(res);
  }).catchError((err) {
    print(err);
  });
}

方法

1. then

通过 .then 的形式,获取 Future 对象执行成功后的结果。

  1. 第一个参数 onValue

 

void main() {
  testThen().then((res) {
    print(res); // 异步数据

    // 可以将数据处理后,继续 return 出去,实现链式调用
    return "加工后的${res}";
  }).then((res) {
    print(res); // 加工后的异步数据
  });
}

// 返回一个 Future<String> 对象,其中 String 可以省略,会被 dart 推断出来
Future<String> testThen() {
  // return 一个 Future 对象
  return new Future(() {
    // 发送给 .then 的数据
    return "异步数据";
  });
}
  1. 第二个参数 onError
void main() {
  testThen().then((res) {
    // 不执行 onValue 的方式
    print(res);
    return "加工后的${res}";
  }, onError: (err) {
    // 接收到 Future 的错误
    print(err); // 这是一个异常
  });
}

Future<String> testThen() {
  return new Future(() {
    throw ('这是一个异常');
  });
}

 静态方法

Future.delayed() 执行一个延时任务。

void main(List<String> args) {
  print('start....');
  Future.delayed(Duration(seconds: 3), () => print("延时任务"));
  print('end....');

  // 执行结果:
  // start....
  // end....
  // 延时任务
}

delayed 中实现的延时操作通过 Timer 来实现的,在实际开发中,如果只是一个单纯的延时操作,建议使用 Timer

void main(List<String> args) {
  print('start....');
  new Timer(Duration(seconds: 3), () => print("延时任务"));
  print('end....');

  // 执行结果:
  // start....
  // end....
  // 延时任务
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值