MENU

サーバーサイドローカル環境JavaScript同期・非同期

【Node.js】 終了を検知して後処理をおこなう方法

更新日:2021/06/08

 

JavaScriptは元々ブラウザでの動作を想定しているので、言語仕様として終了時の処理が定義されていません。
しかしNode.jsでは、プログラム終了時に後処理をおこないたいケースがあります。

 

そこで、Node.jsでの終了処理の方法をお伝えします。

 

 

Node.jsの終了を検知するコード例

 

Node.jsの終了イベントは、次のコードで補足できます。

 


process.on("exit", exitCode => {
   // 後始末処理
});
process.on("SIGINT", ()=>process.exit(0));

 

一つ目のprocess.onはexitイベント発生時に呼び出されるコールバック関数を登録しています。
exitイベントは、コードが終了したときに発生します。
終了には、コードの処理が非同期を含めて完了したときや、process.exitの呼び出し、例外が含まれます。

 

Ctrl+cで終了した時にexitイベント発生は発生しません。
その代わりに、SIGINTシグナルが生成されます。
二つ目のprocess.onは、SIGINTシグナルを補足しています。

 

通常SIGINTシグナルをNode.jsが受け取るとプログラムが終了しますが、リスナーを登録すると終了しなくなります。
そこでprocess.exitの呼び出し、一つ目のexitイベントを発生させ、後始末の処理とプログラムの終了をおこなっています。

 

exitイベントは、終了することを通知するイベントなので、終了をキャンセルすることができません。

 

終了時に非同期処理をおこなう

 

コード内で登録された非同期処理が全て終わると、プログラムは終了します。

 

終了前に処理を行いたいときはexitイベントを補足すればいいのですが、非同期処理を行いたい場合はexitイベントを利用できません。

 

そこで、exitイベントの代わりにbeforeExitイベントを使用します。

 

beforeExitイベントの補足

 


process.on("beforeExit" , exitCode => {
  // 非同期処理の登録
});

 

注意点は、非同期処理が解決したら再度beforeExitイベントが発生する点です。
つまり、フラグなどで管理しないと、プログラムが終わらなくなります。

 

beforeExitイベントを一回だけ処理する

 


let beforeExitCatched = false;

process.on("beforeExit" , exitCode => {
    if( beforeExitCatched ) return;
    beforeExitCatched = true;

  // 非同期処理の登録
});

 

beforeExitイベントは、process.exitでの終了や、例外発生での終了を補足しません。

けーちゃんおススメJavaScript入門書

  • スラスラ読める JavaScript ふりがなプログラミング
  • プログラム未経験者がJavaScript始めるならコレ!
    コードを掲載して自分で理解しろという投げっぱなしな入門書とは異なり、コードに一つ一つどんなことをやっているかをふりがなという形式で解説しています。
    それでいてJavaScriptの基礎と応用を学べる良書です。
  • これからWebをはじめる人のHTML&CSS、JavaScriptのきほんのきほん
  • JavaScriptの機能を実践で活かすにはHTMLやCSSの知識が不可欠です。
    しかしそれらの知識があることが前提として書かれている書籍が多い中、この本は総合的な知識を身に着けることができます。
    HTMLやCSSの知識も不安な方には、ぴったりの一冊です
  •  

    入門書の役割は、自分のやりたいことをネットで調べることができるようになるための、基礎的な知識の獲得です。
    まずはこれらの本でしっかりと基礎知識を身につけましょう。
    そしてもっと高度なことや専門的なことはネットで調べ、情報が足りないと感じたら書籍を購入してください。


    期間限定情報:
    6/21と6/22は年に一度のプライム会員大感謝祭!
    欲しかったアレが安く手に入るチャンスです
    忘れずにチェックしてください!
    僕は以前のタイムセール祭りで4Kモニタが買ったけど、それより安かったらどうしよう・・・

    ちなみにプライム会員でなくても、無料体験で参加できるようです。
    欲しい商品があるか、確認だけでもしておきましょう。

    記事の内容について

     

    こんにちはけーちゃんです。
    説明するのって難しいですね。


    「なんか言ってることおかしくない?」
    たぶん、こんなご意見あると思います。

    裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。

    そんなときは、ご意見もらえたら嬉しいです。

    ご意見はこちら。
    https://note.affi-sapo-sv.com/info.php

    【お願い】

    お願い

    ■このページのURL


    ■このページのタイトル


    ■リンクタグ


    ※リンクして頂いた方でご希望者には貴サイトの紹介記事を作成してリンクを設置します。
    サイト上部の問い合わせよりご連絡ください。
    ただしサイトのジャンルによっては、お断りさせていただくことがあります。