Я использую библиотеку dart:async
для обработки данных. Я добавляю объекты в StreamController
, а другой модуль слушает поток. Теперь я хочу, чтобы другой модуль возвращал результат обработки обратно на вызов add
(в будущем).
Вот пример кода, который должен иллюстрировать то, что я хочу сделать (это не работает, потому что метод add не возвращает будущее):
final controller = new StreamController();
controller.stream.listen((a) {
// Do something with a, after that return something:
return 42;
});
final aFuture = controller.add(new A());
aFuture.then((result) {
// result == 42
});
Возможно ли что-то подобное с dart:async
, другой библиотекой, или мне нужно писать свои собственные классы?
PS: Альтернативой может быть следующее, но было бы «сложнее» использовать простой возврат:
final controller = new StreamController();
controller.stream.listen((container) {
// Do something with container.a, after that return something:
container.completer.complete(42);
});
final completer = new Completer();
controller.add(new Container(new A(), completer));
completer.future.then((result) {
// result == 42
});