当您可以返回异步回调函数时,为什么要使用完成器?

Ete*_*ode 2 dart

当您可以返回异步回调函数(它将返回未来)时,使用完成程序有什么好处。

例:

Future function() {
   return this.socket.request(successCallBack: (response) {
       .......
       return true;
    }); // async call.
Run Code Online (Sandbox Code Playgroud)

反对

   Future function() {
       Completer c = new Completer();
       this.socket.request( .. (...){// async callback.
           c.complete(xyz);
        }); 
        return c.future;
   }
Run Code Online (Sandbox Code Playgroud)

在这里,期货在两种情况下都返回xyz值。是样式偏好吗?

Gün*_*uer 5

完成器适用于更复杂的场景,例如,当您要使用另一种方法而不是创建它的方法来完成将来时。在您的示例中,完成器是多余的。

class MyComponent {
  Completer _initDoneCompleter;

  MyComponent() {
    Completer _initDoneCompleter = new Completer();
    someStream.listen(_eventHandler);
  }

  void _eventHandler(e) {
    if(e.someProperty == 'someValue') {
      _initDoneCompleter.complete(e.someProperty);
    }
  }

  static Future<MyComponent> createNew() async {
    var c = new MyComponent();
    await c.initDoneCompleter.future;
    return c;
  }
}

void main() async {
  var c = await MyComponent.createNew();
}
Run Code Online (Sandbox Code Playgroud)