Как я могу сделать обещание Redux Action Creator вернуть? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь понять, как вернуть обещание от Redux Action Creator.Я прочитал эти две статьи, но не мудрее.Может быть, я просто ненормальный.;)

https://redux.js.org/advanced/middleware https://medium.com/collaborne-engineering/returning-promises-from-redux-action-creators-3035f34fa74b

  1. Мой компонент вызывает действие с именем startCreateNote()
  2. Действие вызывает API базы данных
  3. Операция базы данных завершает и разрешает объект {newCreated-id, reduxStoreObject}
  4. Отправляется создатель действий
  5. Теперь я хочу дождаться разрешения создателя действий Redux, прежде чем продолжить
  6. Показать тостер после того, как Action Creator разрешил

См. Код ниже.

    //ADD_NOTE action generator
    export const addNote = (id, note) => ({
      type: ADD_NOTE,
      id,
      note
    })
    export const startAddNote = (noteData = {}) => {
      return (dispatch, getState) => {
        //Database API Instruction object
        const apiInstruction = { action: DB_ACTION_ADD, payload: noteData, uid: getState().auth.uid }
        //Call database API to insert Note into Database
        return noteDatabaseAPI(apiInstruction)
          .then(({id, reduxStoreObj}) => {
            //The database API resolves id of newly created Note & reduxStore object 

            //THIS IS WHAT I WANT TO ACHIEVE!
            dispatch(addNote(id, reduxStoreObj)).then(
              toast("New note saved!")
            ).catch(
              toast.error("ERROR - Note was not saved!")
            )
          }).catch( (err) => {
            //This gets triggered with error message:
            //database fail! - TypeError: "dispatch(...).then is not a function"
            console.log('database fail! -', err)
          })
      }
    }

Как я могу заставить моего Action Creator вернуть обещание?

1 Ответ

0 голосов
/ 08 июля 2019

Насколько я понимаю, (возможно) самый простой способ заставить создателя действия вернуть обещание - использовать одну из нескольких библиотек асинхронных операций, таких как:

  • перевождь-сага
  • перевождь-преобразователь
  • перевождь-наблюдаемым
  • перевождь-обещание
  • перевождь-петля
  • перевождь корабль
  • Лекс-логика
  • Редукс-эффекты
  • Redux циклы
  • Побочные эффекты

Я нашел больше информации здесь: https://decembersoft.com/posts/what-is-the-right-way-to-do-asynchronous-operations-in-redux/#redux-saga

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...