
Juan Reyes
Pregunta¿Cómo podría ejecutar un Reject en la promesa? Es decir, como hacerle para ejecutar un error y de que manera se podría manejar dicho error.

Victor Lozada
@JuaniSn Hola, si puedes hacer que una promesa falle de varias formas (a mi parecer, espero que te ayude )
Primera manera:
Podemos crear una promesa que reciba por parametro un objeto con dos propiedades
{error, errorMsg}
error
true
const promiseTest = ({error,errorMsg}) =>{ return new Promise((resolve,reject) =>{ if(error) reject(errorMsg) setTimeout(() => resolve('5s passed'),5000) }) }
Ahora si llamamos esta función y le pasamos
error
true
errorMsg
let errorTest = { error: true, errorMsg: 'este seria el mensaje de error ☢' } promiseTest(errorTest) .then(res => console.log(res)) .catch(error => console.log(error))
Al ejecutar el código completo pasaría lo siguiente:
en caso contrario con
error:false
Segunda forma:
Puedes escribir un promesa que siempre falle de esta forma:
const promiseTest = () => new Promise((resolve,reject) => reject('Error en la promesa'))
y ejecutarlo de esta manera
promiseTest() .then(res => console.log(res)) .catch(err => console.log(`Este es el error: ${err}`))
Tercera forma:
Vamos a escribir una promesa que se asemeje al llamado de una api externa con
fetch
const api = (listType) =>{ const userList = [{name:'Jose', age: 20},{name: 'Maria', age: 25}, {name:'luis', age: 45}, {name:'alexandra', age: 45}] return new Promise((resolve,reject) =>{ if(listType === 'empty'){ resolve({ status:404, error:'0 users found' }) } setTimeout(() => resolve({status:200,list:userList}), 3500) }) }
Como puedes ver si le pasamos el string
'empty'
api('empty').then(res => console.log(res)) api().then(res => console.log(res))
Ahora esta promesa la podemos utilizar en una función con async y await, vamos a escribir una función asíncrona que reciba por parámetro si queremos usuarios o no, ahora dentro de esta función vamos a verificar si recibimos los usuarios. En caso de no ser así tiraremos un error el cual verificaremos en el bloque
catch()
let tries = 0 const sendCall = async (listType) =>{ try{ if( tries > 1) throw Error(`tries ended please reload..`) const users = await api(listType) if(users.status !== 200) throw users users.list.forEach(user => console.log(`Hola soy ${user.name} y tengo ${user.age}`)) await sendCall('empty') }catch(error){ if(error.status === 404) { tries++ sendCall() } console.error(error) } } sendCall('empty')
Como puedes ver dentro de
try{}
throw
catch(err){}
Espero que mi aporte encaje con tu duda ! 👍🏻 quisiera saber la opinión de @EduardoHidalgo ya que comenta que "No puedes forzar en código a una promesa o callback a tronar."

Juan Reyes
Tomando en cuenta lo que me dices de que no puedo forzar al codigo de la promesa a fallar, entonces... ¿Qué errores pueden ocurrir durante la falla de una promesa? ¿cuando puedo procesar el catch? Buscaba intentar hacer que la promesa falle y procese el error en esa función del catch.

Eduardo Hidalgo Díaz Rugama
No hay algo como lo que propones. No puedes forzar en código a una promesa o callback a tronar. Puedes hacer que la promesa falle si su código procesa el error, lo haces asi:
api().then(function(result){ return api2(); }).then(function(result2){ return api3(); }).then(function(result3){ // hacer algo }).catch(function(error) { //manejar cualquier error que haya sucedido hasta este punto });
en este enlace puedes ver más ejemplos e información al respecto