2015年11月9日月曜日

learnyounodeを解いてみる(4問目)

learnyounode [MY FIRST ASYNC I/O! ]

非同期処理 をするファイルシステムのメソッドを使ってファイルの改行数を出力するアプリを書いてください。 cat file | wc -l と同じようなアプリです。 アプリの1つ目のコマンドライン引数は、そのファイルへのパスです。


4問目は3問目をただ非同期にしただけです。ヒントにある様にNodoでは非同期の文化が前提です。
なぜならNode.jsノンブロッキングなI/Oを実装することで様々な優位性を引き出しているからです。Node自体の解説は置いておくとしてNodeでノンブロッキングな書き方を実装するにはコールバック関数によって行われます。JavaScriptをある程度書いたことのある人ならご存知でしょう。

同期型のコード
var data = $.post(fname);
//上の処理が終わるまで実行されない
console.log(data)


非同期型のコード
$.post(fname, function(data) {
  console.log(data)
});
//上の処理が終わらなくても実行される
console.log("OK")

つまり、3問目の処理をコールバック関数に納めれば良いだけです。


filelinesAsync.js
var fs = require('fs');
var filename = process.argv[2];

fs.readFile(filename, function(err, data) {
    var lines = data.toString().split('\n').length - 1;
    console.log(lines);
});


$ learnyounode verify filelinesAsync.js 

# おめでとう!

「初めての非同期I/O!」に対するあなたの回答は合格です!



0 件のコメント:

コメントを投稿