繁体   English   中英

如何在 flutter Bloc 中调用并行请求

[英]How to call parallel request in flutter Bloc

我在flutter BLoC

一旦创建了 BLoC 实例,我就想进行 API 调用。 为此,我在构造函数中添加了以下代码。

 class MyBloc extends Bloc<MyBlocEvent, MyBlocState> {

    MyBloc() {
        _repository = MyAccountRepository();
        _myAccountList = List();
        add(API1CallEevent());
        add(API2CallEevent());
      }
...  

和事件处理部分

...  
     @override
      Stream<MyBlocState> mapEventToState(MyBlocEvent event) async* {
        if (event is API1CallEevent) {
    
       var ap1 =
              await _repository.getAPI1();
         ----
         ----
        }else if (event is API2CallEevent) {
    
      var api2 =
              await _repository.getAPI2();
       ----
       ---
        }
    
    }

我面临的问题是 API 调用没有并行执行,这意味着在API1CallEvent完成后API2CallEvent得到执行......

有什么办法可以同时做到这一点?

在我看来,并行执行两个 API 调用并同时期望结果与 BLoC 关系不大。
如果每个 bloc-event 触发一组特定的操作,并且事件彼此分离,那就更好了。

此外;
与其在 init 块中引发事件,不如在提供程序中初始化 Bloc 时这样做。 见例子;

BlocProvider<AuthBloc>(
  lazy: false,
  create: (context) => AuthBloc(
    userRepository: _userRepository,
    )..add(AppStartedEvent()),
  ),

这会在 Bloc 初始化后立即生成一个事件。

一个基本上是一台 state 机器。 它不做并行性,这不是它的目的。 它依次从一个 state 到另一个。 在这样做时,它可以在内部并行地做一些事情,但它不能(或不应该)并行地接受输入。

如果您希望一个事件并行执行多个等待操作,您可以这样做:

@override
Stream<MyBlocState> mapEventToState(MyBlocEvent event) async* {
    if (event is CallTheAPIsEvent) {
        final results = await Future.wait([
           _repository.getAPI1(),
           _repository.getAPI2()
        ]);

        // do something with the results 

        yield ApisHaveBeenCalledState();
    }

    // more event handling
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM