如何在redux传奇的回调中使用yield



我有一个回调,我需要返回true或false来触发一些外部操作,我需要在这个回调内进行一个API调用,所以我需要在回调内获取状态并调度一些操作,我不知道我是否可以使用eventChannel,因为这个回调不能是生成器,只能是一个普通函数。我需要做这样的事情。

zafClient.on('ticket.save', () => {
const state = yield select();
yield put(actionWithApiCall())
// I need to wait for the action to finish and then return something 
// based on the response from the API
// I know how to block the saga to wait for the action dispatched 
// the problem is that I can't use yield here
return somethingfromthestore;
});

顺便说一下,这是zendesk API。

您将无法将生成器函数传递给该API。解决方法是将一个操作直接发送到redux存储,然后编写一个侦听该操作的传奇。

zafClient.on('ticket.save', () => reduxStore.dispatch(actionWithApiCall()))

你必须使redux存储从你创建它的地方可以导出。这样你就可以在这里直接访问它。

其中一个挑战是如何在回调中yield。导入dispatch怎么样?调度不是yield的非生成器版本吗?

如果您正在使用React,那么这样做似乎是一种选择。

在用于指定回调的相同传奇中,您可以随后侦听在dispatch/action creator回调中创建的操作。这是通过指定另一个watchFor函数来完成的(在我的设置中,任何数量的导出watchFor函数都会添加到传奇观察者池中(。

配对的传奇CCD_ 6可以在使用您的最终动作创建器来"完成"从API调用返回的数据所需要发生的任何事情;文件";通过更新商店来调整工作流程。

另一种选择可能是将api调用封装在eventChannel中(请参见:https://github.com/redux-saga/redux-saga/issues/1178)。

-E

最新更新