Completer<T>抽象 接口

一种产生Future对象并在以后通过值或错误来完成它们的方法。

大多数情况下,创建Future最简单的方法是使用Future构造函数之一来捕获单一异步计算的结果

Future(() { doSomething(); return result; });

或者,如果Future代表一系列异步计算的结果,可以使用Future.then或在Future上类似的功能进行链式调用

Future doStuff(){
  return someAsyncOperation().then((result) {
    return someOtherAsyncOperation(result);
  });
}

如果您确实需要从头开始创建Future - 例如,当您正在将基于回调的API转换为基于Future的API时 - 您可以使用Completer如下所示

class AsyncOperation {
  final Completer _completer = new Completer();

  Future<T> doOperation() {
    _startOperation();
    return _completer.future; // Send future object back to client.
  }

  // Something calls this when the value is ready.
  void _finishOperation(T result) {
    _completer.complete(result);
  }

  // If something goes wrong, call this.
  void _errorHappened(error) {
    _completer.completeError(error);
  }
}
注解
  • @vmIsolateUnsendable

构造函数

Completer()
创建一个新的Completer。
factory
Completer.sync()
同步完成Future。
factory

属性

future Future<T>
此Completer完成的Future。
没有设置器
hashCode int
此对象的哈希码。
没有设置器继承
isCompleted bool
future是否已完成。
没有设置器
runtimeType Type
对象运行时类型的表示。
没有设置器继承

方法

complete([FutureOr<T>? value]) → void
使用提供的值完成future
completeError(Object error, [StackTrace? stackTrace]) → void
用错误完成future
noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时调用。
继承的
toString() String
此对象的字符串表示。
继承的

操作符

operator ==(Object other) bool
相等操作符。
继承的