通用的抽象概念:效應
一般來說,觸發 Saga 內部的副作用都是透過傳回某些宣告式效應來執行。(你也可以直接傳回 Promise,但正如在第一部分提到的,這樣會讓測試變得困難。)
Saga 實際上做的事是將所有這些效應組合在一起,以實作所需的控制流程。最基本的範例是透過將傳回值一個接一個放(yield)在 Promise 中,來依序執行傳回的效應。你也可以使用熟悉的控制流程運算子(if
、while
、for
)來實作更複雜的控制流程。
正如我們所看到的,將 call
和 put
等效應,與 takeEvery
等高階 API 結合使用,可以讓我們達成與 redux-thunk
相同的目標,但又具有容易測試的額外優勢。
不過,redux-saga
比 redux-thunk
提供了另一個優勢。在進階部分,你會看到一些功能更強大的效應,它們讓你能夠表達複雜的控制流程,同時又能享有相同易於測試的優勢。