2012-07-27 12 views
6

Mi pregunta general es ¿qué técnicas puedo usar para asegurar que los recursos se limpien/liberen en Javascript? Actualmente, estoy tomando el enfoque C (sin goto) de encontrar cada ruta de ejecución a una devolución o excepción en mis funciones y garantizar que se realice la limpieza.Recursos de liberación de Javascript automáticamente (como RAII)

Mi ejemplo específico es este: en Node.js estoy usando mutexes (a través de bloqueos de archivos) en las funciones miembro de objeto (necesito la exclusión mutua, porque ejecuto varias instancias de la aplicación Node.js y tengo condiciones de carrera cuando diferentes instancias interactúan con el sistema de archivos).

Por ejemplo, en C++ que haría algo como lo siguiente:

void MyClass::dangerous(void) { 
    MyLock lock(&this->mutex); 
    ... 
    // at the end of this function, lock will be destructed and release this->mutex. 
} 

Por lo que yo puedo decir, JavaScript no proporciona ninguna funcionalidad RAII. En C, usaría goto para desenrollar mi asignación de recursos en caso de error, de modo que solo tengo una ruta de retorno desde una función.

¿Cuáles son algunas técnicas para lograr un efecto similar en Javascript?

Respuesta

1

Use la lista de devoluciones de llamada para ser llamado en el end de alcance. Llámalos a todos cuando sea necesario.

Este enfoque se utiliza, por ejemplo, para desinicializar el controlador adicional adjunto a la ventana del navegador. Las devoluciones de llamada que contienen el código de inicialización se almacenan en una lista que se procesa en el evento de descarga de la ventana.

Desafortunadamente, este enfoque no es adecuado para la administración del alcance debido a los requisitos de seguridad de excepción.