Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 已生成未调度到回调中存储的put操作_Typescript_React Native_Generator_Redux Saga - Fatal编程技术网

Typescript 已生成未调度到回调中存储的put操作

Typescript 已生成未调度到回调中存储的put操作,typescript,react-native,generator,redux-saga,Typescript,React Native,Generator,Redux Saga,编辑代码和解释,使事情更清楚: 我有一个saga,它调用一个(非saga)函数,向用户显示警报。 该函数(Alerts.showInAppMessage)接受一个onTap函数,当用户点击该警报时将调用该函数。我无法将yield put(showReceiveDialog(false))作为回调传递,因为它是一个生成器。但是,我通过保存对生成器的引用并对其调用.next(),成功地在用户点击后调用了yield put(showReceiveDialog(false))行(见下文)。 代码是按预期

编辑代码和解释,使事情更清楚:

我有一个saga,它调用一个(非saga)函数,向用户显示警报。
该函数(Alerts.showInAppMessage)接受一个onTap函数,当用户点击该警报时将调用该函数。我无法将yield put(showReceiveDialog(false))作为回调传递,因为它是一个生成器。但是,我通过保存对生成器的引用并对其调用.next(),成功地在用户点击后调用了yield put(showReceiveDialog(false))行(见下文)。 代码是按预期顺序调用的,但是操作不会分派到存储区

让showInAppTransactionGenerator:IterableIterator;
函数*showInAppTransaction(警报:PushAlert){
if(alert.body&&alert.title){
产生警报。showInAppMessage(alert.title,alert.body,()=>{
showInAppTransactionGenerator.next();
});
收益率卖出(showReceiveDialog(false));
}
}
您是否尝试过:

yield call(onTapTransactionMessage);
这就是我们在传说中调用任何函数的方式

您可能还需要对此进行更改:

yield call(navigation.navigate, ScreenName.ACTIVITY);

一种选择是跳过额外的生成器间接寻址,并使用警报回调来解析承诺

function showInAppMessage(title, body) {
  return new Promise(resolve => {
    Alerts.showInAppMessage(alert.title, alert.body, () => {
      resolve();
    });
  });
}
function* showInAppTransaction(alert: PushAlert) {
  if (alert.body && alert.title){
    yield call(showInAppMessage, alert.title, alert.body);
    yield put(showReceiveDialog(false));

  }
}

afaik调用用于异步操作,onTapTransactionMessage()和navigation.navigate(ScreenName.ACTIVITY)都是同步的。我尝试过使用call,但得到了相同的结果(yield navigation.navigate(ScreenName.ACTIVITY);从未被调用),我编辑了代码以使问题更加清楚。调用了yield put(showReceiveDialog(false)),但实际上没有向存储分配任何操作。如果我执行像navigation.navigate(ScreenName.ACTIVITY)这样的普通函数(而不是redux),它就可以正常工作。我认为问题在于在这种情况下访问存储,但我不确定如何解决这个问题。您试图分派什么操作?这看起来像一个函数,而不是一个更新存储的操作。您在哪里导入该函数,或者它的代码是什么?如何调用
showInAppTransaction
?你确定它是通过saga中间件运行的吗?就是这样。谢谢