ゲームを作っていると、いろんなviewに対して非同期で実行していかないといけないので複雑なプログラムになります。

例えばドラクエだと。

1. 勇者の攻撃メッセージ

2. 勇者の攻撃エフェクト

3. モンスターがダメージを受けるエフェクト

4. ダメージメッセージ

5. モンスターの攻撃メッセージ

6. モンスターの攻撃エフェクト

7. 勇者がダメージを受けるエフェクト(画面揺れたり)

8. ダメージメッセージ and HP表示の再描画

こんなのが、非同期で実行しないといけない。

1が終わったら2を実行して、3を.....

終わったらcallbackのネストが深くなるのでなんとかならんかなぁということで、observerパターンを検討。

適当なオブジェクト(model)に状態(state)をもたせて、stateが切り替わったことを各viewに通知(notify)する。

非同期だけど、同期処理っぽくかけるぜひゃっはーって思ってたら、
viewのupdate処理中にmodelのstateを書き換えちゃうと、次のviewへのnotifyを待たずに新規のnotifyが走っちゃう。

どうしたもんか。