请帮助我了解此代码的工作原理。以及为什么会这样。
示例中的变量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);
})
}
当示例 1processQueryResult
的代码时,我得到正确的数据,但是当示例 2的代码时 -我得到空列表。processQueryResult
请告诉我,为什么会这样?
如果您提供指向相应文章或文档的链接,我将很高兴。