将回调转换为期货
Dart 有一个强大的异步库,包括 Future , Stream 等。但是,有时你可能遇到使用回调而不是 Futures 的异步 API。为了弥补回调和期货之间的差距,Dart 提供了 Completer 类。你可以使用 Completer 将回调转换为 Future。
完成程序非常适合使用基于 Future 的 API 桥接基于回调的 API。例如,假设你的数据库驱动程序不使用 Futures,但你需要返回 Future。试试这段代码:
// A good use of a Completer.
Future doStuff() {
Completer completer = new Completer();
runDatabaseQuery(sql, (results) {
completer.complete(results);
});
return completer.future;
}
如果你使用的 API 已经返回 Future,则无需使用 Completer。