¿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.

Juan Reyes

Juan Reyes

Pregunta
studenthace 6 años

¿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.

3 respuestas
para escribir tu comentario
    Victor Lozada

    Victor Lozada

    studenthace 6 años

    @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}
    de esta forma si a la propiedad
    error
    le colocamos como valor
    true
    , podríamos hacer que la función falle o no. Ejemplo con código:

    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
    como
    true
    nos tiraría un error con el mensaje que pasemos por valor en
    errorMsg
    . Ejemplo:

    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:

    promise-reject-example1

    en caso contrario con

    error:false
    seria:

    promise-reject-example2

    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}`))

    promise-reject-2

    Tercera forma:

    Vamos a escribir una promesa que se asemeje al llamado de una api externa con

    fetch
    , la cual nos retornara una lista de usuarios vacía o una llena. En este caso queremos que nos mande una vacía para que ese sea el error y lo podamos manejar llamándola nuevamente unos segundos después para conseguir los usuarios

    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'
    nos retornara un objeto con un mensaje de error y un status, en caso contrario nos retornara la lista de usuarios y un status :

    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()
    para llamar nuevamente esta función de manera recursirva

    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')

    example-5

    Como puedes ver dentro de

    try{}
    puedes hacer uso de
    throw
    para tirar errores directo a
    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

    Juan Reyes

    studenthace 6 años

    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

    Eduardo Hidalgo Díaz Rugama

    studenthace 6 años

    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

    https://platzi.com/comentario/446170/

Curso Básico de Node.js 2018

Curso Básico de Node.js 2018

Escala grandes volúmenes de usuarios y de información con Node.js. Escribe del lado del cliente o del servidor. Consigue una transferencia de datos entre puntos más rápida. ¡No esperes más, conviértete en un desarrollador de aplicaciones de red ahora!

Curso Básico de Node.js 2018
Curso Básico de Node.js 2018

Curso Básico de Node.js 2018

Escala grandes volúmenes de usuarios y de información con Node.js. Escribe del lado del cliente o del servidor. Consigue una transferencia de datos entre puntos más rápida. ¡No esperes más, conviértete en un desarrollador de aplicaciones de red ahora!