【问题标题】:Promise is not getting returned in the redux thunk承诺没有在 redux thunk 中返回
【发布时间】:2019-04-03 04:36:40
【问题描述】:

我是react-redux 的新手。我正在做的是,

我有一个类似的动作

export const updateActivePage = (activePage) => {
  return (dispatch) => {
    return dispatch ({
      type: UPDATE_ACTIVEPAGE,
      payload: activePage
    });
  }
}

现在,在我的容器中,我想调用一个将在此之后调用的操作,

handlePageChange = (pageNumber) => {
    this.props.updateActivePage(pageNumber).then(() => {
      this.props.fetchUserJd(this.props.activePage);
    })
  }



case UPDATE_ACTIVEPAGE:  {
      console.log("action payload", action.payload);
      return {
        ...state,
        activePage: action.payload
      }
    }

所以,我在这里尝试使用then,但我收到Uncaught TypeError: _this.props.updateActivePage(...).then is not a function 的错误

那么我做错了什么?

【问题讨论】:

  • updateActivePage 返回一个函数,而不是一个承诺。
  • 好的。那么我该怎么做呢?
  • 你试过调试它吗?请检查它何时被调用。以及您在哪里定义了updateActivePage。
  • 是的,还更新您的问题并添加更多代码。
  • 实际上该函数也被调用了我在updateActivePage中尝试了控制台日志,然后它正在打印控制台值

标签: reactjs react-native redux react-redux redux-thunk


【解决方案1】:

您从根本上滥用了 redux-thunk。这个库的预期用途是调度一个动作创建者(在本例中为updateActivePage),它返回一个使用状态参数调用的函数。您应该发送 updateActivePage,因为这是您的 thunk。此外,这是应该包含您的计算的函数,然后应该将结果设置为状态。看来您是直接调用此函数,并且出于某种原因期望它返回一个承诺,然后以某种方式进行一些计算。您应该重新访问 thunk 文档。

【讨论】:

  • 我想做的是调用一个有问题的函数。这个函数将通过reducer更新状态值,然后更新的值将成为下一个函数的参数。所以,这就是我需要那里的原因,因为如果我不使用它,那么前一个值将作为参数到下一个函数
  • 我的意思是,你可能正在寻找 dispatch(updateActivePage()).then( ... ),因为调度程序返回了一个承诺
【解决方案2】:
export const updateActivePage = (activePage) => {
  return (dispatch) => {
    return dispatch ({
      type: UPDATE_ACTIVEPAGE,
      payload: activePage
    });
  }
}

dispatch 不是一个承诺,它只是一个函数。

export const updateActivePage = (activePage) => {
  return (dispatch) => {
    return new Promise((res, rej) => {
      dispatch ({
        type: UPDATE_ACTIVEPAGE,
        payload: activePage
      });
      res(true);
    })
  }
}

你可以尝试像我上面提到的那样返回承诺吗?

【讨论】:

  • 这对我有用。谢谢 :-) 这是正确的做法吗?
  • 理想情况下,redux thunk 用于处理异步事件。但是你的不是异步事件,但是如果你想从reducer获取回调,那么我们可以像这样返回一个promise。
猜你喜欢
  • 2018-12-28
  • 2021-06-03
  • 1970-01-01
  • 2019-08-14
  • 2016-11-14
  • 2018-01-08
  • 1970-01-01
  • 2017-11-14
  • 2019-09-22
相关资源
最近更新 更多