обещание в jquery никогда не выполняет блок catch

#redux #promise #es6-promise

#redux #обещание #es6-обещание

Вопрос:

Я использую создателя действия thunk в redux для отправки запроса в мой Rails API через следующее:

 export const addProduct = (product) => (dispatch) =>
  createProduct(product)
    .then((product) => dispatch(receiveProduct(product)))
    .catch((err) => dispatch(receiveProductErrors(err.responseJSON)));
  

createProduct это служебная функция API, которая отправляет запрос на сервер. Для этого я использовал ajax jquery.

 export const createProduct = (product) =>
  $.ajax({
    url: "/api/products",
    method: "POST",
    data: { product },
  });
  

В приведенном выше коде .catch никогда не вычисляется, даже когда я пытаюсь создать запрос с недопустимыми параметрами. .then всегда выполняется.

Если бы кто-нибудь мог направить меня в правильном направлении, это было бы здорово.

Ответ №1:

Я исправил эту проблему. Просто нужно было выдать ошибку, чтобы возвращенное обещание было отклонено.

 export const addProduct = (product) => (dispatch) =>
  createProduct(product)
    .then((product) => dispatch(receiveProduct(product)))
    .catch((err) => { 
      dispatch(receiveProductErrors(err.responseJSON));
      throw err 
    })