En Javascript moderno, si construyo una secuencia de acciones dentro de promise.then(...).catch(...) , pero no me importa el resultado, ni necesito esperar a que termine la secuencia , pero quiero que termine , ¿debo mantener una referencia a la Promesa resultante? ¿Existe el peligro de que pueda ser recolectado como basura y nunca se complete si no mantengo una referencia viva?
Si la respuesta es "esto depende de la implementación", eso es decepcionante. Pero me interesaría especialmente saber cómo manejan esto las versiones recientes de V8 (≥ 9.5).
¿Necesito mantener una referencia a una cadena de promesa JS?
No, no lo haces. La cadena de promesas se ejecutará hasta completarse tanto si guarda la promesa como si no.
Las cosas solo se recolectan como basura cuando ya no se hace referencia a ellas mediante ningún código activo. Una promesa que representa una operación asíncrona activa sigue siendo referenciada por esa operación asíncrona hasta que esa operación asíncrona se completa realmente (ya que la operación asíncrona tiene la capacidad de resolver o rechazar la promesa). Por lo tanto, las promesas no serán elegibles para la recolección de basura hasta que se realicen las operaciones a las que están conectadas.
Esto no depende de la implementación. El recolector de basura no puede recolectar objetos que todavía están en uso. Todo se rompería si ese fuera el caso. Una vez que la promesa ya no está en uso, la recolección de basura no tiene ningún efecto en ningún código en ejecución.