2017-01-26 3 views
1

Использования Реагировать & Redux & Redux-стук, пытаясь сделать этот псевдокод:Реагировать Redux Thunk выборки: выполнить действие, основанное на результате отправок/извлечение

 // pseudocode 
    dispatch(makeServiceRequest) 
    if failed 
     dispatch(makeIdentityRequest) 
     if successful 
     dispatch(makeServiceRequest) 
     end 
    end 

Хочет, чтобы избежать бесконечного цикла, который произойдет, если код был помещен внутри блока .catchmakeServiceRequest.

Я использую логику fetch(url).then(...).catch(...) в действии отправки. fetchdoes not reject on HTTP status errors.

Как сделать этот псевдокод случаем? Каков правильный шаблон для обработки такой ситуации?

ответ

0

Просто then, который проверяет статус HTTP и выдает сообщение об ошибке, если это не статус успеха так же, как он говорит, в вашей ссылке:

function checkStatus(response) { 
    if (response.status >= 200 && response.status < 300) { 
    return response 
    } else { 
    var error = new Error(response.statusText) 
    error.response = response 
    throw error 
    } 
} 

fetch(url).then(checkStatus).then(...).catch(...); 

Кроме этого, я не ясно, на что ваш конкретный вопрос в Редуксе.

Редактировать: на основании ваших комментариев, я думаю, вы спрашиваете, как управлять действиями Redux, которые при отправке могут асинхронно отправлять другие действия. Один из способов моделировать это как «сага». Там есть библиотека Redux под названием redux-saga, которая позволяет вам моделировать такие вещи.

+0

Отправка (makeServiceRequest) делает вышеуказанный код 'fetch.then.catch'. Однако при сбое он должен «makeIdentityRequest», а затем снова попробуйте «makeServiceRequest». В вашем примере строки сбоя попадут в catch, правильно? Если это так, 'makeIdentityRequest' и second' makeServiceRequest' должны быть либо синхронными, либо второе 'makeServiceRequest' должно быть в catch' makeIdentityRequest'. sync может означать бесконечный цикл и в catch будет непреднамеренным поведением для остальной части приложения. AM Я правильно понимаю это? Благодарю. – csi

Смежные вопросы