usando async await y .then juntos

2 minutos de lectura

avatar de usuario
pixelpaul

¿Hay algún daño en el uso async/await y .then().catch() juntos como:

async apiCall(params) {
    var results = await this.anotherCall()
      .then(results => {
        //do any results transformations
        return results;
      })
      .catch(error => {
        //handle any errors here
      });
    return results;
  }

  • Supongo anotherCall hace el .then ¿llamar?

    – Jojo Narte

    6 de marzo de 2019 a las 9:38

  • lo siento, lo olvidé. lo agregué ahora.

    – PixelPaul

    6 de marzo de 2019 a las 9:44

  • no, no hay daño. Solo está pasando el valor final de la cadena de promesa al result variable usando await.

    – yqlim

    06/03/2019 a las 10:00

No quiero resucitar a los muertos, pero quiero señalar que usar await junto con un then cadena significa que el resultado de:

const x = await someAsyncFn().then(() => doSomeLogging());

El valor de x se le asigna el valor de retorno de .thenque no fue muy intuitivo para mí.

avatar de usuario
PeterYuan

No creo que el uso combinado de async/await + sea una buena idea. Especialmente cuando se enfoca en la resolución de la función asíncrona, el uso mixto traerá algún riesgo de distorsionar su resolución en silencio.

ejemplo:

const res = await fetchData().then(()=>{return "something else"}).catch((err)=>{});

console.log(res); // not expected res data but something else

Entonces, el uso mixto es peligroso, por cierto, hará daño leer códigos.

  • Sugerencia: agregue cercas de código y el identificador de idioma para resaltar el código y hacerlo más legible.

    – Amo_las_verduras

    15 de julio de 2021 a las 4:34

avatar de usuario
Abderrahim Soubai-Elidrisi

Si usa Async/await, no necesita encadenar .then() simplemente almacene el resultado devuelto por usted resolve() en una variable (response en el ejemplo), pero si desea manejar los errores, debe intentar/atrapar su código:

async function f() {

  try {
    let response = await fetch('http://no-such-url');
  } catch(err) {
    alert(err); // TypeError: failed to fetch
  }
}

en tu promesa usa:

throw new Error("oops!");

O

Promise.reject(new Error("Whoops!"));

  • Sugerencia: agregue cercas de código y el identificador de idioma para resaltar el código y hacerlo más legible.

    – Amo_las_verduras

    15 de julio de 2021 a las 4:34

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad