返回

将 await, yield 尽收眼底!用透 Flutter Bloc 异步处理!

前端

Flutter Bloc 03 - 基础对象 同步、异步 await yield 操作

Flutter Bloc 的异步处理之基础对象用法

一、背景介绍

在 Flutter Bloc 中,我们经常会看到 yield*, yieldasync*,用得好了,能极大提高编码效率,但若用不好,也容易掉坑。所以这篇文章,我们就来整理一下这些操作符的用法。

二、同步、异步之妙用

首先,我们先来看看同步和异步的具体区别:

  • 同步(Sync): 在同步操作中,程序会按顺序执行,等待一个操作完成,再执行下一个操作。
  • 异步(Async): 在异步操作中,程序可以同时执行多个操作,而不必等待每个操作完成。

在 Flutter Bloc 中,我们可以使用 yieldyield* 来控制操作的执行顺序。

  • 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 中同步、异步操作符的用法。希望这篇文章能对大家有所帮助。