使用完成者返回未来
Future<Results> costlyQuery() {
var completer = new Completer();
database.query("SELECT * FROM giant_table", (results) {
// when complete
completer.complete(results);
}, (error) {
completer.completeException(error);
});
// this returns essentially immediately,
// before query is finished
return completer.future;
}