С помощью RxDart генерировать несколько выходных событий для одного события при выполнении длинного списка асинхронных задач
Я хотел бы сделать что-то очень простое, но я очень новичок в мире Rx и у меня есть некоторые проблемы с переводом моей логики в код. Процесс такой:
- пользователь имеет некоторый код и вводит его в приложение,вызывается Bloc.postCode(код)
- этот код используется для выполнения нескольких вызовов серверных API, а данные сохраняются в БД с помощью асинхронных вызовов через await, при каждом вызове я хотел бы опубликовать статус в Bloc.status.sink.add - это будет отображаться в приложении с помощь StreamBuilder
Мой текущий код выглядит так:
class Bloc {
final _code = PublishSubject<String>();
final _status = BehaviorSubject<Status>();
// stream
Observable<Status> get status => _status.stream;
// sink
Function(String) get postCode => _code.sink.add;
Bloc() {
_code.stream
.map(_processCode)
.listen((status) => _status.sink.add(status));
}
_processCode(code) {
// here I would like to do multiple http/db requests
// and wait for end with await while posting status update
// to the user something like:
// _status.sink.add(Status(status: 'RETRIEVING USERS'));
// var users = await Api.GetUsers(code);
// await DB.SaveUsers(users);
// _status.sink.add(Status(status: 'RETRIEVING IMAGES'));
// var images = await Api.GetUsersImages(users);
// _status.sink.add(Status(status: 'SAVING IMAGES'));
// images.forEach((image) => await FileUtils.SaveImage(image));
return Status(status: 'DONE');
}
}
Я не уверен, что я должен решить эту проблему - какой будет лучший подход?