簡體   English   中英

如何捕獲Redux-Saga`call`函數的yield值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM