Вызов другого эпика внутри одного эпика RXJS

Я новичок в RXJS и разработке в целом. Недавно я начал работать с rxjs и столкнулся со следующей проблемой, и я был бы признателен за помощь/руководство и некоторые пояснения, пожалуйста.

    export const updateSomethingEpic1 = (action$) =>
 action$
    .ofType('UPDATE_SOMETHING')
    .switchMap(({ result }: { result }) =>
      //SOME API CALL
        .map(({ response }) => updateSomethingSuccess(response)) 

         **make call to second epic**

        .catch(err => updateSomethingError(err)),
    );


      //My second epic

        export const updateSomethingEpic2 = (action$) =>
 action$
    .ofType('UPDATE_SOMETHING2')
    .switchMap(({ result }: { result }) =>
      //SOME API CALL
        .map(({ response }) => updateSomethingSuccess2(response))
        .catch(err => updateSomethingError2(err)),
    );

Мой вопрос заключается в том, как я могу позвонить своему второму эпику после того, как мой первый эпик вызвал API и сделал успешный запрос. Хотите сделать вызов в первом эпике после действия updateSomethingSuccess, которое добавляет ответ в хранилище, а затем вызвать второй API после этого.


person jayd    schedule 18.04.2020    source источник


Ответы (1)


Просто верните действие. Код из вашего примера

.map(({ response }) => updateSomethingSuccess(response) **<--- make call to second epic**)  

использовать

.map(({ response }) => updateSomethingSuccess(response) )

где updateSomethingSuccess(response) – создатель действия, как показано ниже.

function updateSomethingSuccess(response) {
   return { type: 'UPDATE_SOMETHING2', payload: response}; // HERE
}

Затем будет выполнен ваш эпик 2 с ofType UPDATE_SOMETHING2.

Это чертовски просто. Вы должны изменить для своих нужд

person Ivan Wong    schedule 18.04.2020
comment
мой updateSomethingSuccess уже возвращает что-то еще, например function updateSomethingSuccess(response) { return { type: 'UPDATED_SUCCESSFULY', payload: response}; } - person jayd; 18.04.2020
comment
мой updateSomethingSuccess уже возвращает что-то еще, например function updateSomethingSuccess(response) { return {type: 'UPDATED_SUCCESSFULY', payload: response}; }, так что этот пример не будет работать правильно? - person jayd; 19.04.2020
comment
@jayd Убедитесь, что у вас есть второй эпик вместе. Проверьте функцию combEpics() в файле rootEpic. - person Ivan Wong; 20.04.2020
comment
В rootEpic они объединены. Но как мне запустить другой эпик, не меняя создателя действия updateSomethingSuccess первого эпика? - person jayd; 20.04.2020