我有一个如下所示的异步函数。但是,在完成流侦听之前,内容将返回null。
我开始玩Future.delayed,但想得更好,想问一下是否有更好的方法来确保它异步?
import 'package:googleapis/drive/v3.dart' as ga;
static Future<String> getContentsFromFile() async {
String content;
ga.Media mediaResponse = await drive.files.get(fileId);
mediaResponse.stream.listen((data) {
print("DataReceived: "+data);
content = data
}, onDone: () async {
print("Task Done");
}, onError: (error) {
print("Some Error");
});
return content;
}
我这样调用该函数。
String content = await getContentsFromFile();
您可以将Completer用于这种控制流程:
import 'dart:async';
import 'package:googleapis/drive/v3.dart' as ga;
static Future<String> getContentsFromFile() async {
Completer<String> completer = Completer();
ga.Media mediaResponse = await drive.files.get(fileId);
mediaResponse.stream.listen((data) {
print("DataReceived: "+data);
completer.complete(data);
}, onDone: () async {
print("Task Done");
}, onError: (error) {
print("Some Error");
});
return completer.future;
}