step npmパッケージサイト
https://npmjs.org/package/step
step GitHubサイト
https://github.com/creationix/step
非同期プログラムは、コールバックの階層が深くなるとコードの見通しが悪くなりがちです。stepは、引数で指定した関数を順番に実行することができます。
下記サンプルのように、各関数の戻り値は次の関数の第二引数として渡されます。
インストール
npm install step
サンプルコード
読み込むテキストファイル
hello.txt
Hello World!
app.js
var http = require('http');
var fs = require('fs');
var Step = require('step');
var keyword = '';
//順番に実行する
Step(
function first(){
//ファイルを読み込む
fs.readFile(__dirname + '/hello.txt', this);
},
function second(err, str){
if(err) throw err;
//読み込んだ内容を文字列に置換し、次の関数の第2引数に渡す
return str.toString();
},
function third(err, str){
if(err) throw err;
keyword = str;
//サーバーの起動
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
//文字列をブラウザに出力
res.end(keyword + '\n');
}).listen(1337, '127.0.0.1');
}
);
console.log('Server running at http://127.0.0.1:1337/');
CoffeeScriptで記述した場合
app.coffee
http = require('http')
fs = require('fs')
Step = require('step')
keyword = ''
#順番に実行する
Step (first = ->
#ファイルを読み込む
fs.readFile __dirname + '/hello.txt', this
), (second = (err, str) ->
throw err if err
#読み込んだ内容を文字列に置換し、次の関数の第2引数に渡す
str.toString()
), third = (err, str) ->
throw err if err
keyword = str
#サーバーの起動
#文字列をブラウザに出力
http.createServer((req, res) ->
res.writeHead 200,
'Content-Type': 'text/plain'
res.end keyword + '\n'
return
).listen 1337, '127.0.0.1'
return
console.log 'Server running at http://127.0.0.1:1337/'