产生的put操作未分派存储在回调中

时间:2019-08-23 14:54:40

标签: typescript react-native generator redux-saga

编辑后的代码和说明使内容更清晰:

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

 let showInAppTransactionGenerator: IterableIterator<any>;

function* showInAppTransaction(alert: PushAlert) {
  if (alert.body && alert.title){
    yield Alerts.showInAppMessage(alert.title, alert.body, () => {
      showInAppTransactionGenerator.next();
    });
    yield put(showReceiveDialog(false));

  }
}

2 个答案:

答案 0 :(得分:1)

一种选择是跳过额外的生成器间接操作,并使用Alerts回调来解决Promise。

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));

  }
}

答案 1 :(得分:0)

您尝试过吗:

yield call(onTapTransactionMessage);

这就是我们在sagas中调用任何函数的方式。

您可能还需要更改它:

yield call(navigation.navigate, ScreenName.ACTIVITY);
相关问题