一个常见的抽象:效果
为了概括,从 Saga 内部触发副作用总是通过 yield 一些声明式效果来完成。(你也可以直接 yield Promise,但这会使测试变得困难,正如我们在第一部分中看到的那样。)
Saga 实际上是将所有这些效果组合在一起以实现所需的控制流。最基本的例子是通过将 yield 一个接一个地放在一起,来对 yield 的效果进行排序。你也可以使用熟悉的控制流运算符(if
、while
、for
)来实现更复杂的控制流。
我们看到,使用像 call
和 put
这样的效果,结合像 takeEvery
这样的高级 API,我们可以实现与 redux-thunk
相同的功能,但同时还具有易于测试的额外优势。
但redux-saga
相较于redux-thunk
提供了另一个优势。在高级部分,您将遇到一些更强大的效果,它们可以让您表达复杂的控制流,同时仍然保持相同的可测试性优势。