Пожалуйста, помогите мне понять, как работает этот код. И почему это так.Dart - Помогите мне понять, как работает этот код на Dart
Переменные 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);
})
}
Когда код processQueryResult
как Пример 1, то я получить правильные данные, но когда код processQueryResult
как Пример 2 - я получаю пустой список ,
Скажите, пожалуйста, почему это происходит?
Я был бы рад, если вы дадите ссылку на соответствующую статью или документацию.
Спасибо большое за помощь! Вы самый крутой человек в stackoverflow! –
Спасибо! Рад, что смог помочь. –