我有redux-saga,它在当前会话等方面产生了很多东西 在这个传奇中的一个生成器函数中,我有一个看起来像这样的地方:
setSessionFailureHandler(() => {
yield openMFAModal(account);
});
setSessionFailureHandler
是第三方SDK,我需要在其中传递回调。
openMFAModal
是打开模态窗口的redux操作。
我正在使用3-d第三方SDK的回调函数,该函数应处理会话失败并打开模式窗口。
当然,我不能在回调中使用yield,这就是为什么我尝试使用eventChannel功能的原因,我为看起来像这样的通道创建了一个新函数:
function setSessionFailureChannel(data) {
return eventChannel((emitter) => {
setSessionFailureHandler(() => {
const { function, account } = data;
return emitter(function(account));
});
});
}
在另一个生成器中,我试图用回调函数调用此函数,但老实说,我不清楚如何做到这一点,我在eventChannel上看到的所有示例都集中在通过callBack将数据传递给您的传奇的想法上,但是我需要以某种方式将我的操作传递给回调,该回调将在处理会话失败后调用它。
我正试图将我的操作和该操作的参数从生成器传递给该函数,如下所示:
const setSessionFailure = yield call(setSessionFailureChannel, { func: openMFAModal, account });
while (true) {
yield call(setSessionFailure);
}
我知道这是错误的方法,也许有人以某种方式做了相同的技巧,并且可以解释如何做到这一点?
答案 0 :(得分:1)
您需要从该频道yield take
开始,诸如此类:
const setSessionFailureChan = yield call(setSessionFailureChannel, { func: openMFAModal, account });
while (true) {
// the channel yields actions due to the way you've structured the emitter
const openMFAModalAction = yield take(setSessionFailureChan);
// then you need to dispatch those actions
yield put(openMFAModalAction);
}
这是假设您在解构setSessionFailureChannel
时更新了func
代码以使用function
而不是data
的情况,