Soy nuevo en Javascript y tengo problemas para lidiar con Async/Await. Aquí está mi código, según tengo entendido, agregar await pone en espera la función Aquí, dentro de foo, debería poner en espera el código en checker() y pasar a ejecutar los comandos fuera de foo , pero en su lugar ejecuta la función checker() antes console.log('the end') .
function checker() { console.log('inside checker'); return "Ok" } async function foo() { let a = await checker(); // Shouldn't using await here let next line outside foo to execute console.log("mid", a); } console.log(1); foo(); console.log('the end'); // Output coming is: //1 //inside checker //the end //mid Ok¿Puede alguien decirme qué propiedades hacen que se comporte de esta manera? Sé que hay algo que me estoy perdiendo, pero no puedo entender qué.
Su función de checker no es asíncrona, pero también necesita hacer algo que sea realmente asíncrono dentro de ella.
Por el momento, todas las promesas se resuelven instantáneamente, lo que no brinda la oportunidad de ejecutar código posterior.
En realidad, necesitamos crear una promesa, simplemente definir una función como asíncrona no es suficiente a menos que algo dentro devuelva una promesa, por lo que devolvemos una nueva promesa que se resuelve mediante la devolución de llamada setTimeout .
Tenga en cuenta que el período de tiempo de espera es 0 , lo cual es suficiente para hacer que se invoque el bucle de eventos de javascript, lo que permite que se procesen las siguientes declaraciones después de llamar a foo . Cambiar esto a cualquier número entero positivo cambiará el tiempo de ejecución pero no el orden de los eventos.
function checker() { return new Promise(resolve => { setTimeout(() => resolve('Ok'), 0) }) } function foo() { let a = checker(); console.log(new Date(), "mid"); return a } (async () => { console.log(new Date(), 'start'); foo().then(v => console.log(new Date(), 'eventually', v)); console.log(new Date(), 'the end'); })()No definiste tu función como asíncrona
comprobador de funciones () { console.log ('comprobador interno'); devolver "Ok" }
Debería ser
verificador de funciones asíncronas() { console.log('inside checker'); devolver "Ok" }
await le dice a su código que espere a que termine la función. Si desea continuar ejecutándose sin esperar, no debe usar la palabra clave await . async también debe estar en la función que desea ejecutar de forma asíncrona, en este caso, checker()
async function checker() { console.log('inside checker'); return "Ok" } function foo() { let a = checker(); console.log("mid", a); } console.log(1); foo(); console.log('the end');