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.

¿Necesito mantener una referencia a una cadena de promesas de JS?

En Javascript moderno, si construyo una secuencia de acciones dentro de promesa.then (...). catch (...), pero no me importa el resultado, ni necesito esperar a que termine la secuencia, pero quiero que termine, ¿necesito mantener una referencia a la promesa resultante? ¿Existe el peligro de que pueda ser eliminado por el recolector de basura y nunca se ejecute hasta el final si no mantengo una referencia viva a él?

Si la respuesta es “esto depende de la implementación”, eso es decepcionante. Pero estaría especialmente interesado en saber cómo manejan esto las versiones recientes de V8 (≥ 9.5).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    En JavaScript moderno, si se construye una secuencia de acciones dentro de promise.then(...).catch(...) y no es necesario esperar a que la secuencia termine, pero sí es necesario que se complete, no es necesario mantener una referencia a la Promise resultante. Mantener una referencia a la Promise solo importa si hay un requisito para acceder a su valor resuelto o manejar su rechazo.

    En cuanto a la segunda parte de la pregunta, si existe un peligro de que la Promise sea recolectada por el recolector de basura y no se complete, depende de la implementación del motor de JavaScript. Si no hay referencias externas a la Promise, puede ser recolectada por el recolector de basura y posiblemente no completada. Sin embargo, los motores de JavaScript modernos tienen optimizaciones para evitar la recolección prematura de Promises, como el uso de una cola interna llamada cola de microtareas. Esta cola permite que las promesas se completen antes de que pueda ocurrir la recolección de basura.

    En cuanto a las versiones recientes de V8, sigue la especificación de ECMAScript para garantizar que las Promises no sean recolectadas por el recolector de basura antes de que puedan completar su ejecución, y utiliza la cola de microtareas para garantizar que todas las promesas en la cola se ejecuten antes de que ocurra cualquier proceso de recolección de basura. Por lo tanto, es poco probable que una Promise creada usando un método then o catch en V8 sea recolectada prematuramente por el recolector de basura, mientras no haya referencias externas a ella.

Comments are closed.