【发布时间】:2017-09-21 18:40:01
【问题描述】:
当 React 组件被卸载/重用时,我试图取消一个承诺。现在我面临一个问题,我可以在下面的小图中更好地解释:
** Promise 必须完成(执行 AJAX 请求并相应地更新 redux 存储)
组件已创建 => 已安装 => _onClick() 已触发 => Promise 开始 => 组件已卸载但已回收 => Promise 已完成 => 在回收的组件中调用 setState() 并以先前的错误状态重新渲染组件。
如何取消/中断/停止下一个“then”但仍执行 Promise?
...
_onClick() {
let dispatch = this.props.dispatch;
if (!this.state.on) {
API.On(dispatch, this.props.id).then(() => {
this.setState({
on: true,
})
}).catch((error) => {
this.setState({
on: false,
})
});
} else {
API.Off(dispatch, this.props.id).then(() => {
this.setState({
on: false,
});
}).catch((error) => {
this.setState({
on: true,
})
})
}
}
...
【问题讨论】:
-
是什么导致你的组件被卸载?
-
@jmargolisvt 组件在列表中。例如:列表中有 2 个组件,第一个被删除,第二个被移到顶部。然后在第二个组件中调用第一个 1 的承诺
标签: javascript reactjs ecmascript-6 promise