Async Flow provides control flow for asynchronous methods.
Async Flow は非同期メソッドの制御フローを提供します。
- Node.js v0.8 +
- Chrome
- Safari
- Firefox
- Opera
- IE9 +
npm install async-flow
var flow = require("async-flow");
// initialize timer function
function timer(time) {
return function (next, skip) {
setTimeout(next, time);
};
}
// 非同期フロー 1
var flow1 = flow.create()
.flow(timer(10))
.flow(timer(30))
.flow(timer(20));
// 非同期フロー 2
var flow2 = flow.create()
.flow(timer(20))
.flow(timer(10));
// 1, 2 から作られた 非同期フロー 3
var flow3 = flow.create(flow1, flow2)
.flow(timer(30))
.flow(function () {
console.log("callback");
});
// 3 から作られた 非同期フロー 4
var flow4 = flow.create(flow3)
.flow(timer(40));
// 3 から作られた 非同期フロー 5
var flow5 = flow.create(flow3)
.flow(timer(20));
// 4, 5 から作られた 非同期フロー
flow.create(flow4, flow5)
.flow(function () {
console.log("callback");
});
new 演算子を使わないためのインターフェース
新しい Flow を生成するための method
Flow Class の instance が返される。
引数に Flow Class の instance を可変長個渡すと、全ての Flow が完了すると流れ出す新しい Flow を生成する。
new 演算子を使って instance を生成する。
Flow.create との違いは引数を配列で渡す点のみ。
制御フローを流すための method
引数に 1 つの関数を渡す。
callback(next, skip[, arg1, arg2, ...])
callback では、非同期/同期 に関わらず、必ず next 又は skip method を 1 度呼び出す必要がある。
次の関数を呼び出す。
値を返さないこと以外は元の関数と全く同じ挙動をするため Function#call や Function#apply を使って context を指定して呼び出すことも可能。
返り値は Flow#results で取得することができる。
2 度以上呼び出した場合の挙動は保証されない。
指定した index 後の関数を呼び出す。
index に 0 を指定すると next と全く同じ挙動をする。
index に 1 を指定すると 1 つ飛ばして次の関数を呼び出すことになる。
2 度以上呼び出した場合の挙動は保証されない。
前の関数で next 又は skip に与えた引数が同じ順番で渡される。
flow.create
した直後では、 create の引数に指定された Flow の最後の関数で指定された引数が連結された状態で渡される。
callback を呼び出した時の返り値が呼び出した順に格納される property
flow.create
した場合、元の Flow のresults
は引き継がない。