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 使うこと。