为什么可以 return 异步回调函数时使用完成器?
Why use a completer when you can return a async callback function?
当您可以 return 一个异步回调函数(这将 return 一个未来)时,使用完成器有什么好处吗?
示例:
Future function() {
return this.socket.request(successCallBack: (response) {
.......
return true;
}); // async call.
反对
Future function() {
Completer c = new Completer();
this.socket.request( .. (...){// async callback.
c.complete(xyz);
});
return c.future;
}
此处,两种情况下的期货 return xyz 值。是风格偏好吗?
完成器适用于更复杂的场景,例如,当您想使用不同于创建它的方法来完成未来时。在您的示例中,完成者是多余的。
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();
}
当您可以 return 一个异步回调函数(这将 return 一个未来)时,使用完成器有什么好处吗?
示例:
Future function() {
return this.socket.request(successCallBack: (response) {
.......
return true;
}); // async call.
反对
Future function() {
Completer c = new Completer();
this.socket.request( .. (...){// async callback.
c.complete(xyz);
});
return c.future;
}
此处,两种情况下的期货 return xyz 值。是风格偏好吗?
完成器适用于更复杂的场景,例如,当您想使用不同于创建它的方法来完成未来时。在您的示例中,完成者是多余的。
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();
}