2

我无法在控制器的构造函数中使用 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;
}
4

1 回答 1

0

I have not actually tried the code but I think it should work. I have also simplified a bit. It is not necessary to store the future in a variable.

@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;
  });
}
于 2014-04-03T17:29:54.963 回答