我无法在控制器的构造函数中使用Future调用。我试图在页面加载时从数据库初始化一个列表,这需要我使用Future。
使用服务类中声明的方法检索该值,该方法已在控制器之前的模块类中添加。
type(DataStreamService);
type(DataStreamController);
以下是我的控制器的代码:
@NgController(selector: '[data-stream-controller]', publishAs: 'DataStreamCtrl')
class DataStreamController {
List<InputDataStruct> dataStream;
DataStreamController(DataStreamService dataStreamSrvc){
Future<List<InputDataStruct>> getDataStreamFtr = dataStreamSrvc.getDataStream();
getDataStreamFtr.then((value){
dataStream = value;
})
.catchError(print("Error occured"));
}
}
不建议在构造函数中使用Future。如果不是我在这里缺少什么。
这是dataStreamSrvc.getDataStream()代码:
Future<List<InputDataStruct>> getDataStream(){
List<InputDataStruct> dataStream = [];
Completer completer = new Completer();
Future getSomeInfoFtr = myDbHelper.getSomeInfo();
getSomeInfoFtr.then((infoAndList){
for(String info in infoAndList){
inputDataStruct = new InputDataStruct(info);
dataStream.add(inputDataStruct);
}
});
completer.complete(dataStream);
return completer.future;
}
答案 0 :(得分:0)
我实际上没有尝试过代码,但我认为它应该可行。 我也简化了一下。没有必要将未来存储在变量中。
@NgController(selector: '[data-stream-controller]', publishAs: 'DataStreamCtrl')
class DataStreamController {
List<InputDataStruct> dataStream;
DataStreamController(DataStreamService dataStreamSrvc){
dataStreamSrvc.getDataStream().then((value){
dataStream = value;
})
.catchError(print("Error occured"));
}
}
Future<List<InputDataStruct>> getDataStream(){
List<InputDataStruct> dataStream = [];
return myDbHelper.getSomeInfo().then((infoAndList){
for(String info in infoAndList){
inputDataStruct = new InputDataStruct(info);
dataStream.add(inputDataStruct);
}
return dataStream;
});
}