[英]How do I capture the yield value of a Redux-Saga `call` function?
我有一個非常簡單的函數,它返回一個對象:
export const fetchThing = (thingId) => ({
description: "hi",
thing: thingId
})
稍后,我將擴展該功能以執行異步操作,但我試圖使事情從簡單開始。
我正在嘗試使用Redux-Saga執行以下操作:
export function* requestThingSaga({payload}) {
const thing = yield call(fetchThing, payload.thingId)
console.log(thing);
}
但是,當我測試傳奇時,我發現fetchThing
沒有被調用:
gen = requestThingSaga({payload: {thingId: 1 });
gen.next() // logs 'undefined'
我不明白發生了什么。 call
文檔說可以使用具有正常返回值的函數。 我不明白為什么這行不通。 有任何想法嗎?
redux-saga
的全部要點是使效果“聲明性” 。 因此,您需要一個能夠處理這些效果的解釋器。 ReduxSaga中間件充當執行實際調用,等待Promise等的解釋器。否則,它只是一個聲明(在這種情況下)您要調用外部函數。 因此,您的測試有點像“測試效果解釋器”,它僅斷言您的傳奇返回的效果而不實際執行“真實”操作。
gen = requestThingSaga({payload: {thingId: 1 });
// test by inspecting .value w/o actuall call
gen.next().value.should.be.deep.equal(call(fetchThing, 1))
// "interprete" call effect by passing a value back
gen.next({description: 'hi', thing: 1})
BTW gen
應該更好地命名為iter
:),因為它是Iterator而不是Generator。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.