2017-06-02 123 views
0

我使用终极版与原生的反应,我需要重新用我的行动反应过来终极版嵌套调度不叫

const fetchPosts =() => { 

    return (dispatch) => { 

    Api.get('/posts') 
     .then(response => dispatch({type: FETCH_POSTS_SUCCESS, payload: response})) 
     .catch(err => dispatch({type: FETCH_POSTS_FAIL, payload: err})) 
    } 
} 

我想在登录

const login = ({username, password}) => { 

    return (dispatch) => { 

    Api.post('/auth', {username, password}) 
     .then(response => dispatch({type: LOGIN_SUCCESS, payload: response}) 
     .then(() => fetchPosts()) 
     .catch(err => dispatch({type: LOGIN_FAIL, payload: err})) 
    } 
} 

问题后总是取帖子是抓取帖子派遣不会发生的原因。

有什么建议吗?

回答

0

代码不工作的主要原因是因为fetchPosts没有返回承诺。试试下面的代码:

const fetchPosts = (dispatch) => { 
 
    return Api.get('/posts') 
 
     .then(response => dispatch({type: FETCH_POSTS_SUCCESS, payload: response})) 
 
     .catch(err => dispatch({type: FETCH_POSTS_FAIL, payload: err})) 
 
} 
 

 
const login = ({username, password}) => { 
 
    return (dispatch) => { 
 
    Api.post('/auth', {username, password}) 
 
     .then(response => dispatch({type: LOGIN_SUCCESS, payload: response}) 
 
     .then(() => fetchPosts(dispatch)) 
 
     .catch(err => dispatch({type: LOGIN_FAIL, payload: err})) 
 
    } 
 
}

+0

遗憾没派遣登录操作错误(我做了纠正我的代码) –

+0

,我想重用fetchPosts()其他地方 –

+0

尝试编辑答案。 –

1

你应该dispatch(fetchPosts()),你可以直接在同一then回调称之为dispatch({type: LOGIN_SUCCESS, payload: response}后,或保持在第二then回调,它们都是OK:

const login = ({username, password}) => { 

    return (dispatch) => { 

    Api.post('/auth', {username, password}) 
     .then(response => { 
     dispatch({type: LOGIN_SUCCESS, payload: response} 
     dispatch(fetchPosts()) 
     }) 
     .catch(err => dispatch({type: LOGIN_FAIL, payload: err})) 
    } 
}