如何在redux-saga的回调中使用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,似乎是一种选择。

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

配对的传奇worker可以最终确定从API调用返回的数据需要发生的一切,然后再使用最终操作创建者通过更新商店来“记录”工作流。

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

-E

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...