как с помощью Future API присвоить значене типу int значение типа Future
Rак с помощью Future API присвоить значене типу int значение типа Future
1 вариант для понимания отложенного вычисления
import 'dart:async';
void main() {
print('start');
Future(() => 1).then(print);
Future(() => 2).then(print);
Future(() => 3).then(print);
print('end');
}
start
end
1
2
3
2 вариант async / await
import 'dart:async';
main() async {
int x = 0;
//функция main должна быть async
//перед функцией поставить await, что бы получить тип int
x = await f();
print(x); //5
}
Future<int> f() async {
return await 5;
}
5
3 вариант Future API
import 'dart:async';
main() {
int x = 0;
Future<int> future = Future(() => 5);
//если здесь поставить await все работает,
//но это уже async / await
//x = await future.then((value) => value);
future.then((value) {
x = value;
print(x); //5
});
//как с помощью Future API сделать, что бы
//значение x было равно 5
print(x); //0
}
0
5
Ответы (1 шт):
Автор решения: MiT
→ Ссылка
Раз вы хотите узнать как все было то вот вам пример как раньше работали с Future API до async/await (а также, статья):
void main() {
getInt().then((value) {
int x = value;
print(x); //5
}).then((v) {
print('test'); // test
}).onError((e, st) {
print(e); // eroor
}).whenComplete((){
print('complete'); // test
});
}
Future<int> getInt() {
Future<int> future = Future(() => 5);
return future;
}
В принципе это ничего не меняет, можно и сейчас также писать. Но удобнее через async/await, как в плане обработки ошибок так и в плане работы со значением.
Для сравнения:
void main() async {
try {
int x = await getInt();
print(x);
print('test'); // test
} catch (e) {
print(e); // eroor
} finally {
print('complete');
}
}
Future<int> getInt() {
Future<int> future = Future(() => 5);
return future;
}