node realiza un seguimiento de todas las solicitudes de trabajo pendientes. Su llamada fs.writefile() crea una solicitud de trabajo para E/S y agrega su devolución de llamada a esa solicitud. nodo guarda la solicitud de trabajo en sus tablas al mismo tiempo que inicia la actividad de E/S. La ejecución del código sale cuando alcanzas el final de tu función. (Pero tu memoria/variables/permanecen etc.)
acabados Más tarde, la E/S y el nodo toma la solicitud de trabajo de sus mesas. Ve la devolución de llamada asociada a la solicitud y así llama a esa función con los resultados de la solicitud de E/S. Sus datos globales aún existen y aún existen variables en los cierres, por lo que su código parece que nunca se detuvo.
Si no hace nada más, no hacen más peticiones, a continuación, cuando regrese de sus funciones de nodo se detendrá, porque entonces no habrá ningún resto de solicitudes en las colas.
lo que el nodo 'sabe' para seguir funcionando porque rastrea trabajo solicitudes activas en sus tablas y no se detendrá hasta que todos en cola el trabajo está hecho y esas mesas están vacías.
Tenga en cuenta que "el trabajo en cola" puede incluir cosas como esperar a que los temporizadores o en espera de datos de la red para llegar. Usted hace una solicitud que dice "llámame aquí cuando/si algo sucede más tarde".
setTimeout() es una solicitud de trabajo también (si entrecierra un poco los ojos). Con un temporizador sabrá que algo sucederá y cuándo sucederá. Con setTimeout() solo ocurrirá un 'algo'. nodo hará una sola llamada a su devolución de llamada y luego 'olvidará' la solicitud de trabajo. Si, en su lugar, usa setInterval(), ha creado una solicitud de trabajo persistente. nodo "guardará" la solicitud de trabajo en sus tablas y llamará a su devolución de llamada repetidamente, hasta que cancele la solicitud.
net.Server.listen() es otra solicitud de trabajo que es una solicitud de trabajo persistente. No sabe cuándo se llamará a su devolución de llamada ni cuántas veces, porque eso depende de los clientes remotos que se conectan a su servidor. nodo mantiene la solicitud de trabajo activa en sus tablas hasta que cancela la solicitud.
¿Los conceptos de solicitudes de trabajo y tablas son algo que usted inventó para ilustrar su punto o estos constructos reales se utilizan en la implementación del nodo? Lo pregunto porque no veo estos términos usados en ningún otro lado. – d512
Creo que las solicitudes de trabajo se conocen como tareas y las tablas se conocen como colas de tareas. Ver https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/ –