[flutter] completer理解

1,132 阅读1分钟

个人理解:completer与future的不同在于

completer可以自己决定何时完成这个异步操作,只有调用completer.complete(),这个异步操作才算完成。

future的完成取决于内部代码何时完成

import 'dart:async';
import 'dart:io';

void main() async {
  Completer<int> completer;
  print('main begin');
  var t = await test();
  print('t:$t');
  var d = await demo(completer);
  print("d:$d");
  var d2 = await demo2();
  print("d2:$d2");
  print('main end');
}

Future<int> test() async {
  print('test begin');
  await sleep(Duration(seconds: 1));
  print('test end');
  return 1;
}

Future<int> demo(Completer completer) {
  completer = Completer<int>();
  int sum = 0;
  for (int i = 0; i <= 100; i++) {
    sum += i;
    if (i == 50) {
      completer.complete(sum);
    }
  }
  return completer.future;
}

demo2() async {
  int sum = 0;
  for (int i = 0; i <= 100; i++) {
    sum += i;
  }
  return sum;
}

输出:

main begin
test begin
test end
t:1
d:1275
d2:5050
main end