我正在使用react-native和redux创建一个应用程序。我的应用程序应向Firebase Rest API发送请求,以取回用户的待办事项。在我的react-native应用程序中,我通过redux函数获得此响应,该函数在react-native组件的connect部分中传递。我想在调用函数后立即链接.then块。
我尝试创建一个诺言并将其返回给我,但是在链接.then / .catch时,它会自动解决错误。 我也曾尝试做同样的事情而没有做出承诺。
这是我的动作:
export const fetchHomework = () => {
return (dispatch, getState) => {
dispatch(uiStartLoading());
dispatch(uiStartFetchingHomework());
dispatch(authGetToken())
.catch(err => {
dispatch(errHandler(err))
})
.then(token => {
const uid = getState().userid;
fetch(restAPI)
.catch(err => {
dispatch(errHandler(err));
})
.then(res => res.json())
.then(response => {
dispatch({
type : 'SET_HOMEWORK_FOR_AGENDA',
homework : response
})
dispatch(uiStopLoading());
dispatch(uiStopFetchingHomework());
})
.catch(err => {
dispatch(errHandler(err));
dispatch(uiStopLoading());
dispatch(uiStopFetchingHomework());
})
})
dispatch(uiStopLoading());
dispatch(uiStopFetchingHomework());
}
}
注意:rest api替换为rest api的url 这是我获取此数据的位置:
this.setState({refreshing: true});
this.props.retrieveHomework();
this.setState({refreshing: false, firebaseItems : this.props.homework});
this.loadItems(this.state.selectedDay);
(刷新时在函数中调用)
我希望当我在retrieveHomework之后链接一个.then块时,then块将等待函数完成然后在其中运行代码,但这不是正在发生的事情。发生的情况是它跳过了then块,或者抛出了catch块捕获的错误。
编辑: 由于我使用的是redux thunk,因此this.props.retrieveHomework是一个指向异步操作的函数。
答案 0 :(得分:0)
您需要将所有要等待的代码移入.then
:
this.props.retrieveHomework()
.then(() => {
this.setState({refreshing: false, firebaseItems : this.props.homework});
this.loadItems(this.state.selectedDay); // If this is async, you need to `return` it here as well
});