Async Flow provides control flow for asynchronous methods.
JavaScript
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test
.gitignore
.travis.yml
LICENSE
README.md
example.js
package.json

README.md

Async Flow Build Status

Async Flow provides control flow for asynchronous methods.

Async Flow は非同期メソッドの制御フローを提供します。

Support

  • Node.js v0.8 +
  • Chrome
  • Safari
  • Firefox
  • Opera
  • IE9 +

Example

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");
  });

API Documentation

Flow Class

Flow.create([Flow1, Flow2, ...])

new 演算子を使わないためのインターフェース
新しい Flow を生成するための method
Flow Class の instance が返される。
引数に Flow Class の instance を可変長個渡すと、全ての Flow が完了すると流れ出す新しい Flow を生成する。

new Flow(Array)

new 演算子を使って instance を生成する。
Flow.create との違いは引数を配列で渡す点のみ。

#flow(Function callback) -> Flow

制御フローを流すための method
引数に 1 つの関数を渡す。
callback(next, skip[, arg1, arg2, ...])
callback では、非同期/同期 に関わらず、必ず next 又は skip method を 1 度呼び出す必要がある。

next([arg1, arg2, ...]) -> void

次の関数を呼び出す。
値を返さないこと以外は元の関数と全く同じ挙動をするため Function#call や Function#apply を使って context を指定して呼び出すことも可能。
返り値は Flow#results で取得することができる。
2 度以上呼び出した場合の挙動は保証されない。

skip(Number index[, arg1, arg2, ...]) -> void

指定した index 後の関数を呼び出す。
index に 0 を指定すると next と全く同じ挙動をする。
index に 1 を指定すると 1 つ飛ばして次の関数を呼び出すことになる。
2 度以上呼び出した場合の挙動は保証されない。

arg1, arg2, ...

前の関数で next 又は skip に与えた引数が同じ順番で渡される。
flow.create した直後では、 create の引数に指定された Flow の最後の関数で指定された引数が連結された状態で渡される。

Array results

callback を呼び出した時の返り値が呼び出した順に格納される property
flow.create した場合、元の Flow の results は引き継がない。