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

実際にコードを試したことはありませんが、うまくいくはずです。私も少し単純化しました。未来を変数に格納する必要はありません。

@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 に答える