返回
将 await, yield 尽收眼底!用透 Flutter Bloc 异步处理!
前端
2024-02-05 23:14:57
Flutter Bloc 03 - 基础对象 同步、异步 await yield 操作
Flutter Bloc 的异步处理之基础对象用法
一、背景介绍
在 Flutter Bloc 中,我们经常会看到 yield*
, yield
和 async*
,用得好了,能极大提高编码效率,但若用不好,也容易掉坑。所以这篇文章,我们就来整理一下这些操作符的用法。
二、同步、异步之妙用
首先,我们先来看看同步和异步的具体区别:
- 同步(Sync): 在同步操作中,程序会按顺序执行,等待一个操作完成,再执行下一个操作。
- 异步(Async): 在异步操作中,程序可以同时执行多个操作,而不必等待每个操作完成。
在 Flutter Bloc 中,我们可以使用 yield
和 yield*
来控制操作的执行顺序。
- yield: 会立即执行一个操作,并等待该操作完成。
- yield:* 会将一个操作放在队列中,并继续执行后续的操作。当队列中的操作完成时,程序会继续执行 yield* 后的操作。
三、精华案例速览
同步示例
bloc.add(EventA());
yield StateA();
bloc.add(EventB());
yield StateB();
上面的代码中,yield StateA()
会立即执行,并等待该操作完成。然后,yield StateB()
会将一个操作放在队列中,并继续执行后续的操作。当队列中的操作完成时,程序会继续执行 yield StateB()
后的操作。
异步示例
bloc.add(EventA());
yield* Future.delayed(Duration(seconds: 1), () => StateA());
bloc.add(EventB());
yield StateB();
上面的代码中,yield* Future.delayed(Duration(seconds: 1), () => StateA());
会将一个操作放在队列中,并继续执行后续的操作。当队列中的操作完成时,程序会继续执行 yield* Future.delayed(Duration(seconds: 1), () => StateA());
后的操作。
四、最后忠告
最后,为了帮助大家更好地理解和使用这些操作符,这里再提供一些忠告:
- 尽量使用 yield 来控制操作的执行顺序。* 这样可以避免同步操作带来的性能问题。
- 如果确实需要使用 yield,请确保在 yield 后等待操作完成。 否则,可能会导致程序出现错误。
- 在使用 yield 时,请注意操作的执行顺序。* 确保队列中的操作按照正确的顺序执行。
好了,以上就是关于 Flutter Bloc 中同步、异步操作符的用法。希望这篇文章能对大家有所帮助。