¿Usamos await en funciones asíncronas que usan await?

CorePress2024-01-25  8

Tengo un punto final de Rest API /foo/bar y lo llamo desde una función asíncrona bar() y estoy llamando a esa función desde otra función foo () así

async function bar () {
    let result;

    result = await $.ajax({}); /* pseudocode only */
    return result;
}

function foo () {
    let result;

    result = bar ();
    console.log ('This should display before the result, not after it');
    console.log (result);
    console.log ('This should display after the result, not before it');

foo();
 

Estoy obteniendo resultados inconsistentes y quiero saber si es porque necesito hacer que foo sea asincrónico así

async function bar () {
    let result;

    result = await $.ajax({}); /* pseudocode only */
    return result;
}

async function foo () {
    let result;

    result = await bar ();
    console.log ('This should display before the result, not after it');
    console.log (result);
    console.log ('This should display after the result, not after it');

foo();

Básicamente, mi pregunta es si una espera dentro de una función asíncrona hace que esa función sea sincrónica (es decir, bloquea la función de llamada hasta que la espera regresa).

Sí, lo haces; de lo contrario, solo obtendrás la Promesa`

-Daniel A. Blanco

27/03/2021 a las 19:11

no puedes bloquear una función en javascript

-Daniel A. Blanco

27/03/2021 a las 19:11

Sí, await detiene la ejecución de la función (¡y solo la función!) hasta que se resuelva la promesa. Sin embargo, eso es lo que realmente hace que las funciones asíncronas sean asíncronas, porque no sabes cuándo continúa la ejecución.

- Jonas Wilms

27/03/2021 a las 19:14



------------------------------------

Tienes razón. Las funciones asíncronas devolverán una Promesa, por lo que si desea esperar la respuesta de una función asíncrona, necesitará await.

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare