访问.then中的道具(React / redux)

时间:2018-04-19 10:25:03

标签: javascript reactjs redux promise redux-thunk

我的项目正在使用react,redux和redux-thunk。

我希望在启动清除页面的功能之前等待我的功能结束。不幸的是,我在.then

中访问我的函数时遇到了问题

这是我之前没有承诺的代码然后:

this.props.dispatch(ScheduleAction(..))
this.props.deleteTab()

问题是有时候在将信息发送到我的服务器之前调用了deleteTab(),所以不太好。

然后我做了:

Promise.resolve(this.props.dispatch(ScheduleAction(..)))
  .then(function(response) {
         this.props.deleteTab();
         console.log("TabDeleted !!!");
         return response
   })

现在的问题是我无法访问this.props.deleteTab();

我有这个错误:

  

未捕获(承诺)TypeError:无法读取未定义

的属性'props'

如果有人知道如何通过访问.then中的道具来解决这个问题,请提前感谢!!

3 个答案:

答案 0 :(得分:6)

试试这个。你当时没有访问权限。如果您使用如下箭头方法,您应该能够访问它。

Promise.resolve(this.props.dispatch(ScheduleAction(..)))
  .then((response)=> {
         this.props.deleteTab();
         console.log("TabDeleted !!!");
         return response
   })

答案 1 :(得分:0)

您遇到的问题是您丢失了this关键字的上下文,这意味着this现在未定义。

由于您可以在承诺之外访问this.props,您想要的是bind this promise这个功能,这样做就像这样做

Promise.resolve(this.props.dispatch(ScheduleAction(..)))
  .bind(this)
  .then(function(response) {
         this.props.deleteTab();
         console.log("TabDeleted !!!");
         return response
   })

答案 2 :(得分:0)

希望这种方法适合你

const $this = this;
const { dispatch } = this.props;

Promise.resolve(dispatch(ScheduleAction(..)))
.then(function(response) {
  $this.deleteTab();
  console.log("TabDeleted !!!");
  return response;
})