(JS)Node.jsはじめた.Nimbleフロー制御

最近Node.jsを始めた.おもろい.

バージョンアップとかの停滞問題で Node.js から io.js がフォークされたばかりのタイミングがどうかなとは思ったのだけれど. その辺の経緯は,Node学園等で著名なYosuke FURUKAWA氏のブログなどで補完してください.

from scratch io.jsについて知っていること

エントリ書く際に「Node.js」か「io.js」か表記をどうすべきか非常に迷った. そういうことだけでも,今Node.jsを始めるかどうか迷うひとも多そうだけど,それは逆に自分にチャンスかもしれないと思い,始めてみた.

ま,ともかく.本題.

Nodeをやるにあたって「実践Node.jsプログラミング」(Kindle)を選書した. Nodeのテキストはまだ少ないです. で,結構誤記とか説明不足なところとか(そもそもKindle書籍としての出来が超絶不満足@現時点)多い.

気になったところでわかったことがあったのでメモメモ.

Nimble

Nimbleというモジュールは,いくつかの処理(function単位)を直列(シリアル)/並列(パラレル)コントロールするコミュニティ(サードパーティ)モジュールです.「いくつかの処理」はまとめて「フロー」と言う. ここまでをまとめると「Nimble」はフローをコントールするモジュールです.

ちなみにNodeの処理(先述のfunction)は非同期で処理されることが前提となっていることが多いようです.Nodeのキモであり,強みですね.

で,その中でcallbackが各処理に渡されるのだが,callbackはなんなのだろう?という疑問を持ちました.

var flow = require('nimble');

flow.series([

  function(callback) {
    console.log('one');
    callback();
  },
  function(callback) {
    console.log('two');
    callback();
  }

]);

実行結果は,「one」「two」と標準出力されます. 上記コードからcallbackを取り除くと「one」しか出力されません.

var flow = require('nimble');

flow.series([

  function() {
    console.log('one');
  },
  function() {
    console.log('two');
  }

]);

なるほど,正常終了したかどうかを知らせるcallbackなのですね. callback()することで「おけー」, callback()しなければ以降の処理はしないということですね.

そういえばmochaで非同期のサンプルコードを見たけど,「done();」ってなんだろうと思ってた.(実践はしていない) これがそれかな?doneのほうが名称として良いね!

mocha - Asynchronous code

describe('User', function(){
  describe('#save()', function(){
    it('should save without error', function(done){
      var user = new User('Luna');
      user.save(function(err){
        if (err) throw err;
        done();
      });
    })
  });
});



参考になりました. the callback and underscore in nimble flow-control tool StackOverflow