¿Qué pasa si no esperamos una función javascript asíncrona?
¡Hasta donde sé, algunos lenguajes como C # no deberían ejecutar una función asíncrona sin administrar!
Quería saber si esto también es cierto para el lenguaje JavaScript.
var asynchronousFunction = async function() { //... } function main() { var result = true; //... asynchronousFunction(); // The result of this function has no effect on our output (result) //... return result; }Se ejecuta igual. (De hecho, nunca await una función, espera la Promesa que devuelve).
La función asíncrona se ejecuta de forma síncrona hasta que la primera await o return dentro de ella, momento en el que se devuelve una Promise a la persona que llama y el resto de la función se organiza para ejecutarse más tarde.
Depende de la persona que llama hacer algo (o nada) a la Promesa. Después de todo, es posible que desee almacenar la promesa en una matriz y esperar a todas ( Promise.all ) o hacer algo más esotérico al respecto, de modo que a JavaScript no le importe.
Sin embargo, algunos IDE y linters lo suficientemente inteligentes pueden generar una advertencia sobre promesas no controladas, especialmente si tiene suficiente información de tipo para hacerlo (por ejemplo, usando TypeScript).
Es cierto para javascript también.
No desea simplemente crear una promesa y dejarla totalmente suspendida, si hay errores, se convierten en errores no controlados y si sale inesperadamente, entonces no tiene forma de saberlo.
Lo que recomiendo es usar Promise.race en el nivel superior y luego ejecutará todas sus funciones asíncronas en paralelo, pero se cerrará si alguna de ellas se cierra inesperadamente.
async function worker() { while (true) { // do background work in a loop } } async function server() { await init() await listen() } function main() { const p0 = worker() const p1 = server() try { await Promise.race([p0, p1]) console.log('done') return true } catch (err) { console.log('The server had an error unexpectedly', err) return false } } Si espera que las promesas finalmente finalicen correctamente, use Promise.all en su lugar, que esperará hasta que todas las promesas finalicen correctamente antes de resolverse.