2012-07-27 15 views
6

La mia domanda generale è quali tecniche posso utilizzare per garantire che le risorse vengano pulite/rilasciate in Javascript? Attualmente, sto prendendo l'approccio C (senza goto) di trovare ogni percorso di esecuzione per un ritorno o un'eccezione nelle mie funzioni e assicurare che si verifichi la pulizia.Risorse di rilascio JavaScript automaticamente (come RAII)

Il mio esempio specifico è questo: In Node.js sto usando mutex (attraverso i blocchi di file) nelle funzioni membro dell'oggetto (ho bisogno dell'esclusione reciproca, perché eseguo più istanze dell'applicazione Node.js e ho delle condizioni di gara quando diverse istanze interagiscono con il file system).

Ad esempio, in C++ vorrei fare qualcosa di simile al seguente:

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

Per quanto posso dire, JavaScript non fornisce alcuna funzionalità Raii. In C, vorrei usare goto s per scaricare la mia allocazione delle risorse in caso di errore in modo che ho solo un percorso di ritorno da una funzione.

Quali sono alcune tecniche per ottenere un effetto simile in Javascript?

risposta

1

Utilizzare l'elenco di callback da chiamare sul fine dell'ambito. Chiamali tutti quando necessario.

Questo approccio viene utilizzato, ad esempio per inizializzare il gestore aggiuntivo collegato alla finestra del browser. Le callback contenenti il ​​codice di inizializzazione sono archiviate in un elenco che viene elaborato sull'evento di scaricamento della finestra.

Sfortunatamente questo approccio è in gran parte inadatto per la gestione dell'ambito a causa di requisiti di sicurezza eccezionali.

Problemi correlati