使用RxDart可以在执行一长串异步任务时在一个事件上生成多个输出事件

时间:2019-01-21 18:27:05

标签: flutter reactive-programming rxdart

我想完成一些非常简单的事情,但是对于Rx世界来说我是一个新手,在将我的逻辑转换为代码方面遇到一些问题。过程如下:

  • 用户有一些代码并将其输入到应用中, Bloc.postCode(代码)被称为
  • 此代码用于对服务器API进行多次调用,并且通过await使用异步调用将数据保存到DB,每次调用我都希望将状态发布到 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');
  }
}

我不确定我该如何解决-最好的方法是什么?

0 个答案:

没有答案