Node.js(JavaScript)のあるあるハマりポイント

なにかしらプログラミング経験のあるプログラマが、本格的に JavaScript をはじめたときにハマるポイントを残しておく。

テスト実行したら終わらないことがある

概要

mocha 実行したらローディングでたままテストが完了しない。

原因

callback の書いてる場所がおかしい(非同期処理が考慮されてない)。

module.exports = function(userId, callback) {
  var result = {};

  service.get(userId, function(err, user) {
    result.id = user.Id;
    result.name = user.name;
    result.time = new Date().toISOString();
    //※ここに書くべき
  });

  callback(result); //※ここじゃない
}

なぜハマるのか

例えば Java で非同期処理といったら Thread プログラミングをするときであり、フレームワーク側で隠蔽してくれていることが多くて、そもそも書く機会が少ない。仮に使うとなったらそれなりの心構えが必要になるので、そのときに頭が切り替わる。
それと比べて JavaScript では callback による非同期処理が一般的なコードの中にありふれているため、非同期であることが頭の中からスッカリ抜けてた。

Tips

コールバックのネストで書いても動作上は問題ないが、見難い(醜い)ので async.js 使うこと。