Tengo algunos problemas con una gran aplicación JS en la que he estado trabajando durante un tiempo. Necesitábamos una ubicación centralizada para arrojar varios errores de la API. Tuve un poco de idea y decidí que un buen enfoque sería enviar todas las llamadas API a través de una función en la clase de servicio API principal.
Así que reescribí todas las llamadas a la API en mis tiendas para utilizar este nuevo método de llamar a la API, pero ahora algunas solicitudes ya no arrojan los errores correctos.
Me pregunto si hay demasiadas promesas anidadas o algo así, ya que estamos usando código generado para el cliente API en la aplicación frontend. Entonces, en el siguiente ejemplo, la devolución de anAsyncApiCallHere
sería una promesa.
Encontré circunstancias para activar un 422 de nuestra API para una solicitud, pero por alguna razón, simplemente no puedo hacer que .catch
en mi tienda se active cuando ocurre el reject(err)
.
Aquí hay un código de ejemplo que raspé para explicarlo mejor:
// API Service code: const ApiService = { callApi(module, request, ...args) { return new Promise(resolve, reject) { this[module][request].call(null, ...args).then(response => { resolve(response); }).catch(err => { // I do my extra logic/centralised error message stuff here based on response code // ^ this works // the reject line below does not seem to work reject(err); }); } }, moduleA: { requestA(argumentOne, argumentTwo) { return anAsyncApiCallHere(argumentOne, argumentTwo); } } } // in store: export default const StoreModule = { actions: { makeAnApiCall() { let argumentOne, argumentTwo; ApiService.callApi('moduleA', 'requestA', argumentOne, argumentTwo).then(response => { // This section works. console.log(response); }).catch(err => { // This section isn't working. console.error(err); }); } } }