[英]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.