在react-native中使用redux-thunk与异步调度

时间:2018-04-01 07:14:57

标签: javascript asynchronous react-native redux redux-thunk

我在react-native代码中设置了redux-thunk。

在mapDispatchToProps中我有:

const mapDispatchToProps = dispatch => {
     return {
         login: (state, navigator) => dispatch({
             type: "USER",
             payload: loginFunc(state, navigator)
          }),
     }'
}

login函数是一个firebase函数,它返回一个最终返回我需要的对象的promise链。

然而,在我的reducer中,看起来我的有效载荷是一个承诺或一些时髦的对象。 它看起来像:

{ 
     a: someVal, 
     b: sommeOtherVal, 
     c: someMoreVal,
     ...ValsUpToI.
     i: {
       // The values I actually need show up
     }

这让我感到困惑,因为当我尝试payload.myValue时,我在我的redux状态下得到undefined。我认为只是payload.i这样做是不安全的,因为这可能是一些promiseasync问题吗?我以后很可能会成为别的什么?

1 个答案:

答案 0 :(得分:1)

使用异步操作方法执行redux documentation中提到的基于promise的函数API调用。

const mapDispatchToProps = dispatch => {
 return {
     login: (state, navigator) => {
         return loginFunc(state, navigator).then(
             response => dispatch({
                 type: "USER",
                 payload: response
             }),
             error => console.log('An error occurred.', error)
        )
     }
 }

通过这种方式,您可以调用基于承诺的功能并正确使用响应或错误。