是否可以在Dart中创建自己的future 来从方法返回,或者必须始终从Dart异步库方法之一返回内置的future 返回?
我想定义一个始终返回Future<List<Base>>
的函数,无论它是实际执行异步调用(文件读取/Ajax/等)还是只是获取局部变量,如下所示:
List<Base> aListOfItems = ...;
Future<List<Base>> GetItemList(){
return new Future(aListOfItems);
}
是否可以在Dart中创建自己的future 来从方法返回,或者必须始终从Dart异步库方法之一返回内置的future 返回?
我想定义一个始终返回Future<List<Base>>
的函数,无论它是实际执行异步调用(文件读取/Ajax/等)还是只是获取局部变量,如下所示:
List<Base> aListOfItems = ...;
Future<List<Base>> GetItemList(){
return new Future(aListOfItems);
}
如果你需要创造future ,你可以使用Completer
.请参见文档中的Completer
class.下面是一个示例:
Future<List<Base>> GetItemList(){
var completer = new Completer<List<Base>>();
// At some time you need to complete the future:
completer.complete(new List<Base>());
return completer.future;
}
但大多数情况下,你不需要用完成者来创造future .如本例所示:
Future<List<Base>> GetItemList(){
var completer = new Completer();
aFuture.then((a) {
// At some time you need to complete the future:
completer.complete(a);
});
return completer.future;
}
使用完成器可以使代码变得非常复杂.您可以简单地使用以下代码,因为then()
也会返回Future
:
Future<List<Base>> GetItemList(){
return aFuture.then((a) {
// Do something..
});
}
或文件io的示例:
Future<List<String>> readCommaSeperatedList(file){
return file.readAsString().then((text) => text.split(','));
}
有关更多提示,请参见this blog post.