Javascript 如何获取Redux Saga`call`函数的收益值?

Javascript 如何获取Redux Saga`call`函数的收益值?,javascript,redux-saga,Javascript,Redux Saga,我有一个非常简单的函数,返回一个对象: export const fetchThing = (thingId) => ({ description: "hi", thing: thingId }) 稍后,我将扩展此函数以执行异步操作,但我将尝试从简单开始 使用Redux Saga,我正试图做到以下几点: export function* requestThingSaga({payload}) { const thing = yield call(fetchThing, pay

我有一个非常简单的函数,返回一个对象:

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'

我不明白发生了什么事。调用的文档说明可以使用具有正常返回值的函数。我不明白这为什么行不通。有什么想法吗?

redux传奇的整个要点是让效果具有“声明性”。因此,您需要一个能够处理这些效果的解释器。ReduxSaga中间件充当这样一个解释器,执行所有调用,等待承诺等。否则,它只是一个声明(在本例中)您希望调用外部函数。所以你们的测试是一种“测试效果解释器”,它只断言你们的传奇故事所返回的效果,而实际上并没有做一些“真实的”事情

顺便说一句,gen应该更好地命名为iter,因为它是迭代器而不是生成器

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})