认识 Dart 异步编程(一)


由于 Dart 是单线程编程语言,对于进行网络请求和I/O操作,线程将发生阻塞,严重影响依赖于此任务的下一步操作。

通常,在一个阻塞任务之后还有许许多多的任务等待被执行。下一步任务需要上一步任务的结果,比如:请求一个数据,并将数据显示到界面上,此时,百分之九十的情况有NULL异常。

下面是一个模拟阻塞任务的下一步获取该任务返回的数据时发生的异常:

User user = post('http://api.example.com/get/user/1');
print(user); // => null exception.

Future对象用于表示异步操作的结果,可以很好地解决上诉情况。Future 对象会等待阻塞任务完成之后才执行下一步任务。

post('http://api.example.com/get/user/1').then((value) => print(value));

post方法返回 Future 对象,Future 对象可以链式使用then,等到阻塞任务完成之后进行下一步操作。