このコードがどのように機能するかを理解するのを手伝ってください。そして、なぜそのように機能するのか。
例の変数res
はStream<Row>
.
メソッドFuture<List>
から戻りたい。processQueryResult
このコードは正常に機能し、正しい結果が得られます。
例 1
Future<List> processQueryResult(mysql.Results res) {
List data = [];
res.toList().then((List<mysql.Row> rows) {
rows.forEach((mysql.Row row) {
data.add({name: row.name, email: row.email});
});
});
return new Future<List>(() {
return data;
});
}
結果data
には、必要なすべてのデータが含まれています。
しかし、教えてください、なぜコードのこの部分を移動すると
res.toList().then((List<mysql.Row> rows) {
rows.forEach((mysql.Row row) {
data.add({name: row.name, email: row.email});
});
});
に
return new Future<List>(() {
res.toList().then((List<mysql.Row> rows) {
rows.forEach((mysql.Row row) {
data.add({name: row.name, email: row.email});
});
});
return data;
});
最後にコードの外観 (例 2 ):
Future<List> processQueryResult(mysql.Results res) {
List data = [];
return new Future<List>(() {
res.toList().then((List<mysql.Row> rows) {
rows.forEach((mysql.Row row) {
data.add({name: row.name, email: row.email});
});
});
return data;
});
}
その結果、空のリストが表示されます。
テストでは、次の関数を使用します。
testResult() {
mysql.Results res = ... // get results;
processQueryResult(res).then((data) {
print(data);
})
}
Example 1processQueryResult
のようなコードでは正しいデータが得られますが、Example 2のようなコードでは空のリストが得られます。processQueryResult
教えてください、なぜこれが起こっているのですか?
適切な記事またはドキュメントへのリンクを提供していただければ幸いです。