【发布时间】:2014-10-24 08:18:12
【问题描述】:
请帮助我了解这段代码的工作原理。以及为什么会这样。
示例中的变量res 是Stream<Row>。
我想从processQueryResult 方法返回Future<List>。这段代码可以正常工作,我得到的结果是正确的。
示例 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);
})
}
当processQueryResult 的代码像示例1 时,我得到正确的数据,但是当processQueryResult 的代码像示例2 - 我得到空列表。
请告诉我,为什么会这样?
如果您提供指向相应文章或文档的链接,我将非常高兴。
【问题讨论】:
标签: dart dart-async