es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Si un objeto promesa se establece dentro de una función, ¿se eliminará el objeto promesa de la memoria una vez que se haya completado la función?

Me preguntaba si usar el método fetch para devolver un objeto de promesa para manejar operaciones asíncronas dentro de una función se ve así:

<script>
function test(){
    let promise = fetch("https://xxx");
    promise.then(()=>{console.log("¡completado!")});
};
test()
</script>

Esto funcionará, pero mi pregunta es una vez que la función test() se haya ejecutado por completo, según lo básico en JavaScript donde “Las variables de funciones (locales) se eliminan cuando se completa la función”, mi pensamiento es que la variable de promesa se eliminará y el objeto de promesa real estará en algún lugar de la memoria sin ninguna referencia, por lo que javascript lo eliminará. Pero todavía funciona.

¿Es la implementación del objeto Promise lo que hace que funcione de manera diferente en JavaScript?

¡Muchas gracias!

Actualización 1: Perdón por mi error tonto por no declarar la variable de promesa con let o var. Aquí está agregada. ¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, la implementación de los objetos Promise en JavaScript está diseñada para funcionar de manera diferente que las variables de función regulares. Cuando se crea un objeto Promise, se registra en la biblioteca Promise incorporada del motor JavaScript, la cual mantiene una referencia al objeto hasta que se resuelva o se rechace. Incluso si la función que creó el objeto Promise ha completado su ejecución y sus variables locales han sido eliminadas de la memoria, el objeto Promise en sí aún es accesible y sus devoluciones de llamada se pueden activar cuando se resuelva o se rechace la Promise.

    Entonces, en el caso de tu código, aunque la variable promise es una variable local dentro de la función test() y se elimina cuando la función se completa, el objeto Promise aún está registrado en la biblioteca Promise y se puede resolver o rechazar fuera de la función test().

    Además, el uso de la declaración let o var para la variable promise asegurará que solo esté disponible dentro del ámbito de la función test(), pero esto no afecta al objeto Promise en sí, el cual todavía se puede resolver o rechazar incluso fuera de la función test().

Comments are closed.