вернуть обещание от Thunk - PullRequest
1 голос
/ 23 марта 2019

Я пытаюсь использовать свой первый thunk в redux-thunk:

, получая redux-thunk в мое приложение, которое уже использует наблюдаемый redux:

import thunk from 'redux-thunk'

export const store = createStore(
  rootReducer,
  vepo,
  composeWithDevTools(applyMiddleware(createEpicMiddleware(rootEpic), thunk))
)

Используя его вот так:

Создатель действия:

export const updateShowProductIsVeganModal = (payload: boolean) => {
  return function (dispatch) {
    return new Promise((resolve, reject) => {
      dispatch({
        type: 'UPDATE_INSPECTION_SHOW_PRODUCT_IS_VEGAN_MODAL',
        payload
      })
      resolve()
    })
  }
}

Тогда у меня есть этот компонент (он намного больше, я его разобрал для этого вопроса):

const veganPress = (props, refs) => {
  props.updateShowProductIsVeganModal(true).then(() => {
    console.log("plz work")
    refs.toast.show('hello world!')
  })
}

class ProductDetailsView extends Component<any, State> {
  render = () => {
    return (
       <Button onPress={() => veganPress(this.props, this.refs)}>
       <Toast ref="toast"/>
    )}
}

const mapDispatchToProps = (dispatch: Dispatch<*>): any => ({
  updateShowProductIsVeganModal: (show: boolean) => {
    dispatch(updateShowProductIsVeganModal(show))
  }
})

const view = connect(
  mapStateToProps,
  mapDispatchToProps
)(ProductDetailsView)

Iполучить ошибку:

ExceptionsManager.js: 63 Невозможно прочитать свойство 'then' из неопределенного

Это относится к .then внутри veganPress()

Как вернуть обещание, которое может использовать .then так, как я пытаюсь это сделать?

1 Ответ

2 голосов
/ 23 марта 2019

updateShowProductIsVeganModal не возвращает обещание.Измените его на

const mapDispatchToProps = (dispatch: Dispatch<*>): any => ({
  updateShowProductIsVeganModal: (show: boolean) => {
    return dispatch(updateShowProductIsVeganModal(show))
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...