Пожалуйста, помогите мне понять, как работает этот код. И почему это так работает.
Переменные 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});
});
});
To
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 - я получаю пустой список.
Скажите, пожалуйста, почему это происходит?
Буду рад, если дадите ссылку на соответствующую статью или документацию.