我使用react
,我有一个异步操作,它使用axios
从API接收一些数据。我还有一个标志(状态变量tableLoaded
),它描述是否获取数据。
this.props.fetchDataAction(requestParams).then(
() => {
this.setState({
data: this.props.reports.data
});
}
).then(() => {
this.setState({ tableLoaded: true })
});
字符串
我希望我的标志tableLoaded
在两种情况下都设置为true-无论是在API调用成功还是失败之后,所以我只是在我的Promise上添加了另一个then()
,它触发了将此标志设置为true的函数。
我的问题是-这是实现我的目标的最佳解决方案吗?或者我应该在两种情况下重复这段代码?
3条答案
按热度按时间bejyjqdl1#
您应该使用Promise.finally语法。
字符串
**编辑:**如果
fetchDataAction
的返回是Axios的promise,那么你应该用.then
替换.finally
,因为Axios不提供finally
方法。然后我会说你最初的建议是正确的。你可以评论第二个.then
,这样你就知道为什么了。型
flseospp2#
您可以使用
all()
来捕获成功和失败0ve6wy6x3#
使用当前方法会遇到的一个问题是,任何可能的错误都将阻止最后一个
.then
运行,从而使tableLoaded
在出现错误时仍然保持false
。See this pen for an example of this issue.Promise.finally
是一种很好的解决方法,正如另一个答案所指出的那样,但我个人更喜欢使用async/await。字符串