如何取消下一个'然后'在React组件卸载/重用时的Promise中?

时间:2017-04-24 22:59:04

标签: javascript reactjs ecmascript-6 promise

我正在尝试在卸载/重用React组件时取消承诺。现在我正面临一个问题,我可以在下面的小图中更好地解释:

** Promise必须完成(执行AJAX请求并相应地更新redux存储)

创建组件=> Mounted => _onClick()fired =>承诺开始=>组件已卸载但已被回收=>承诺完成=>在循环的组件中调用setState()并从前一个组件中以错误的状态重新渲染。

如何取消/中断/停止下一个'然后'但仍然执行承诺?

chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/

1 个答案:

答案 0 :(得分:-1)

我在这里做的只是为设置状态的承诺的主体添加一个条件。您可以使用React的生命周期钩子来跟踪元素当前是否在DOM中。

这是一个跟踪是否已安装的组件的快速示例:

class Test extends React.Component {
  render() {
    return (<p>hello</p>);
  }

  componentDidMount () {
    this.mounted = true
    console.log(`mounted: ${this.mounted}`)
  }

  componentWillUnmount () {
    this.mounted = false
    console.log(`mounted: ${this.mounted}`)
  }
}

实例:https://codepen.io/jenius/pen/MmjPJV

基于此,你应该能够在你的promise处理程序中添加一个简单的if / else来解决你的问题!