2012-04-02 11 views
0

Ich möchte einen asynchronen Rückruf ausführen, wenn das Ereignis exit ausgegeben wird. Zum Beispiel:Ausführen eines asynchronen Codes, wenn das Ereignis "exit" ausgegeben wird

process.addListener ("exit", function(){ 
    asynchronousCode (function(){ 
     //my callback 
    }); 
}); 

Ich habe beide versucht, mit addListener und on aber der Code innerhalb der Rückruf wird ausgeführt nie, da das Programm das Ereignis exit abgibt, führt die asynchrone Funktion und beendet, ohne den Rückruf aufrufen.

Wie kann ich das Programm zwingen zu warten, bis ich process.emit ("exit") ausführen? Vielleicht muss der Code synchron sein ...

+0

Ich bin mir nicht sicher, warum Code zum Entladen der Seite asynchron sein sollte, Sie sollten das Standardverhalten des Ereignisses verhindern (e.preventDefault auf true setzen oder false zurückgeben) und eine Statusvariable in asynchronicCode() beibehalten (setzen Sie sie) true, um den aktuellen Standort zu verschieben. Wie auch immer, der Benutzer wird die Seite "verlassen" und nach ein wenig (während er noch interagieren kann) wird alles verschwinden ... Ich denke, es ist ein bisschen verwirrend für ihn. –

+0

Ich schreibe keinen HTTP-Server, ich möchte nur einige Aktionen ausführen, wenn das Programm beendet ist. Das Ereignis 'exit' übergibt keinen Parameter an den Listener. –

+0

Ich habe über das Entladeereignis gesprochen, aber ich schätze, es macht nicht so viel Sinn, etwas Asynchrones am Ausgang zu machen (weil der einzige Weg, es abzuschließen, ist, den Ausgang selbst zu verschieben, dann macht man ... synchron) –

Antwort

3

Von the documentation:

abgegeben wird, wenn der Prozess über zu beenden. Dies ist ein guter Haken, um konstante Zeitüberprüfungen des Modulzustands durchzuführen (wie für Komponententests). Die Hauptereignisschleife wird nicht mehr ausgeführt, nachdem der Callback 'Beenden' beendet wurde, sodass Timer nicht geplant werden können.

Sie können also in diesem Handler keine asynchrone Funktion verwenden.

+0

Nun, ich habe auch dieses Code-Snippet gelesen, aber ich dachte, dass es eine Problemumgehung gab. –

+0

Welche Art von Funktion versuchen Sie anzurufen? – Locksfree

+0

Ich möchte ein Verzeichnis und seinen gesamten Inhalt entfernen, also: stat, unlink, readdir, rmdir –

Verwandte Themen