как с помощью 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;
}
→ Ссылка