跳到主要内容

Future和Completer的区别

Future

Future表示一个可能在将来某个时间点完成的计算或操作。它可以成功完成并返回一个值,或者以错误完成并抛出异常。Future通常用于异步操作,比如网络请求、文件读写等。

Future<String> fetchUserOrder() {
return Future.delayed(Duration(seconds: 2), () => 'Large Latte');
}

void main() {
print('Fetching user order...');
fetchUserOrder().then((order) {
print('Order: $order');
});
}

fetchUserOrder返回一个Future,该Future在2秒后完成,并返回字符串'Large Latte'

  • 通常通过内置方法或异步函数自动创建和返回。
  • 完成状态由系统自动控制,例如网络请求完成后自动返回结果。
  • 适用于简单的异步操作,结果由系统或异步函数自动处理。

Completer

类似new Promise通过resolve回调来终止该异步状态 Completer是一个用于手动控制Future完成状态的工具。通过Completer,可以创建一个Future并在需要的时候将其标记为完成(如需要等待用户授权结果的场景)

import 'dart:async';

Future<String> fetchUserOrder() {
Completer<String> completer = Completer<String>();

// 模拟一个异步操作
Future.delayed(Duration(seconds: 2), () {
completer.complete('Large Latte');
});

return completer.future;
}

void main() {
print('Fetching user order...');
fetchUserOrder().then((order) {
print('Order: $order');
});
}

  • 手动创建,主要用于需要手动控制Future完成状态的场景。
  • 开发者手动控制完成状态,调用completecompleteError方法。
  • 适用于复杂的异步操作,特别是需要手动控制Future完成的场景,例如并发操作的协调。