Esperas Asincrónicas - Async / Await

Las async no pueden ser utilizados en es5 deben ser usados en es6 o superior.

En TypeScript cuando código JS se está ejecutando (sincronamente) y utiliza una función la cual contiene una o más promesas se podrá utilizar la palabra reservada await para parar la ejecución del código JS hasta que la función termine correctamente, en caso de fallo, está función generará un error de manera sincrona que podremos atrapar mediante un try catch.

// ----------- test.ts -----------
// No es código de verdad solamente es la prueba de concepto
async function foo() {
    try {
        var val = await getMeAPromise();
        console.log(val);
    }
    catch(err) {
        console.log('Error: ', err.message);
    }
}
  • Si la función termina entonces devolverá un valor
  • Si la función falla devolverá un error que podremos capturar

Esto convierte drasticamente la programación asíncrona tan fácil como la programación síncrona. ya que cumple 3 requisitos indispensables:

  1. Capacidad de pausar la función en tiempo de ejecución
  2. Capacidad de pasarle valores a funciones
  3. Capacidad de lanzar excepciones en caso de fallo

El código que genera el ejemplo de arriba debería ya sonar de algo ya que esa es la sintaxís utilizada en TypeScript para crear generators, es decir, el código previamente visto se convertiría en:

// No olvideís que al no tener la función que genera las peticiones
// Este código no funciona

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments)).next());
    });
};
// No es código de verdad solamente es la prueba de concepto
function foo() {
    return __awaiter(this, void 0, void 0, function* () {
        try {
            var val = yield getMeAPromise();
            console.log(val);
        }
        catch (err) {
            console.log('Error: ', err.message);
        }
    });
}

Obviamente esto no es lo mismo que lo que se explica en la lección anterior sino una versión más compleja.


results matching ""

    No results matching ""