问题描述
我有一个回调,我需要返回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,似乎是一种选择。
在用于指定回调的同一传奇中,您可以随后侦听在分派/动作创建者回调中创建的动作。这是通过指定另一个watchFor
函数来完成的(在我的设置中,任意数量的导出的watchFor
函数都会添加到Saga观察者池中)。
配对的传奇worker
可以最终确定从API调用返回的数据需要发生的一切,然后再使用最终操作创建者通过更新商店来“记录”工作流。
另一个选择可能是将api调用包装在eventChannel
中(请参阅:https://github.com/redux-saga/redux-saga/issues/1178)。
-E