#dart #dart-stream
#дротик #поток #уступка
Вопрос:
У меня есть поток в моем коде, в который я внес некоторые изменения / преобразования. Я хотел бы вернуть этот поток как результат моей функции.
Этот код работает:
Stream<int> returnStream2() async* {
var list = <int>[1,2,3];
var result = Stream<int>.fromIterable(list);
await for( var i in result ) {
yield i;
}
}
Почему эта более простая и понятная версия не работает?
Stream<int> returnStream1() async* {
var list = <int>[1,2,3];
var result = Stream<int>.fromIterable(list);
return resu<
}
Я получаю сообщение об ошибке «Не удается вернуть значение из функции генератора (с использованием модификатора ‘async *’)
Ответ №1:
Либо используйте yield*
, как вы уже обнаружили, либо просто не делайте функцию async*
функцией. Если этот поток — единственное, что вы получаете, вы можете просто сделать:
Stream<int> returnStream1() {
var list = <int>[1,2,3];
var result = Stream<int>.fromIterable(list);
return resu<
}
Если вы делаете другие вещи, то yield* stream;
или await for (var event in stream) yield event;
являются обоими вариантами (они отличаются тем, как они обрабатывают события ошибок из потока, но для простых событий данных они должны быть эквивалентны).
Комментарии:
1. Спасибо, в этом есть смысл
Ответ №2:
Я только что обнаружил ключевое слово yield *, которое решает мою проблему:
Stream<int> returnStream1() async* {
var list = <int>[1,2,3];
var result = Stream<int>.fromIterable(list);
yield* resu<
}