コントローラ初期化処理で異常が起きた時の動作の整理 #367

Closed
fukudayasuo opened this Issue Jun 20, 2014 · 2 comments

Comments

Projects
None yet
2 participants
@fukudayasuo

コントローラのライフサイクルで例外が起きた時や、ライフサイクルイベントがrejectされるプロミスを返した時、ルートエレメントが無い場合、テンプレートが無い場合など、コントローラの初期化に失敗する場合の動作について、以下のような挙動になるようにします。

  • コントローラの初期化に失敗した時、コントローラをdisposeする。ユーザコード(__initなど)で例外が起きた時は、それを投げる(飲まない)。
  • 初期化完了前にコントローラがdisposeされるときに、__unbind、__disposeのライフサイクルは実行しない。
  • コントローラをdisposeするとき、__unbind、__disposeで例外が起きてもコントローラのunbind、dispose処理は行う。ただし、nullifyは実行しない(エラー原因の特定をしやすくするため)。例外が起きたらそれ以降のライフサイクルは実行しない。
  • コントローラの初期化に失敗した時、イベントをあげる。controllerManagerをeventDispatcherのmixinとして、controllerManagerがdispatchするようにする。コントローラ定義オブジェクトや例外オブジェクト等をイベントハンドラの引数として受け取れるようにする。
@fukudayasuo

This comment has been minimized.

Show comment
Hide comment
@fukudayasuo

fukudayasuo Jun 20, 2014

  • 初期化完了前にコントローラがdisposeされるときに、__unbind、__disposeのライフサイクルは実行しない。

を ↓ のように変更します。

  • disposeされるときには必ず__unbind, __disposeは呼ぶ。ただし、__unbind,__disposeで例外が起きた場合はcatchする。一番最初に起きた例外のみスローする。(__readyなどで例外が起きてdisposeされた場合は__unbind,__disposeで起きた例外はスローされない)
  • 初期化完了前にコントローラがdisposeされるときに、__unbind、__disposeのライフサイクルは実行しない。

を ↓ のように変更します。

  • disposeされるときには必ず__unbind, __disposeは呼ぶ。ただし、__unbind,__disposeで例外が起きた場合はcatchする。一番最初に起きた例外のみスローする。(__readyなどで例外が起きてdisposeされた場合は__unbind,__disposeで起きた例外はスローされない)

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 20, 2014

fukudayasuo
#367 内部エラーでコントローラをdisposeする時、最初に起きた例外をdispose処理後に投げるようにしました。
内部からエラーのためにdisposeされた場合はnullifyしないようにしました。
controllerManagerをeventDispatcherのmixinにして、コントローラがエラーで死んでdispose処理が終わった後にcontrollerManagerから"emergency"イベントをあげるようにしました。
子コントローラでdisposeを呼んだ時に投げられるエラーのエラーメッセージと投げるタイミングをdispose()を呼んですぐのタイミングに修正。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 23, 2014

fukudayasuo
#367
ライフサイクルイベントでdispose()を呼んだ時に__unbindや__disposeで起きたエラーが飲まれていたので修正しました。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 23, 2014

fukudayasuo
#367 子コントローラの__constructで例外が起きた時にdisposeされるようにしました。
emergencyイベントをlifecycleerrorイベントにリネームしました。
__disposeで例外が起きた時に、dispose()の返すプロミスがrejectされるようにし、lifecycleerrorイベントが上がるようにしました。
failReason→rejectReasonにリネームしました。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 24, 2014

fukudayasuo
#367 __unbind時の例外が正しく投げられるようにしました
#334 h5controllerunboundイベントは、管理対象に追加されたコントローラについてのみ上がるようにしました。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 24, 2014

fukudayasuo
#367
コントローラのテンプレートロードやライフサイクルの返すプロミスの失敗など、非同期処理による失敗が原因でdisposeControllerされるときに、nullifyしないようにしました。
テストケースをそれに合わせて修正しました。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 24, 2014

fukudayasuo
#367 rejectされた時にもlifecycleerrorイベントをあげるようにしました。
エラー時、reject時にもviewのclearをするようにしました。
エラー時、reject時にdisposeの返すpromiseについてrejectするようにしました。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 24, 2014

@fukudayasuo fukudayasuo self-assigned this Jun 25, 2014

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 26, 2014

fukudayasuo
#367 __constructでunbindできないようにしました。
unbindされたコントローラはライフサイクルの実行を継続しないようにしました。
unbind時にまだresolveもrejectもされていないライフサイクルプロミスがあればrejectするようにしました。
(今まではdisposeでやっていました)
h5controllerunboundイベントは、h5controllerboundが上がった後(__ready含む__ready以降==isPostInitがtrue)の時に上げるようにしました。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 26, 2014

fukudayasuo
#367 各ライフサイクルでunbindを呼んだ時のテストケースを追加しました。
unbind済みのコントローラのメソッドを呼ばないように修正しました。
@fukudayasuo

This comment has been minimized.

Show comment
Hide comment
@fukudayasuo

fukudayasuo Jun 26, 2014

  • コントローラの異常終了時はh5.core.controllerManagerでlifecycleerrorイベントが上がるようにしました。
  • __constructでunbind()は呼べないようにしました。
  • unbind()を呼んだ時に、まだresolveもrejectもされていないライフサイクルプロミスがあった場合、reject()するようにしました。(今までdisposeのタイミングで行っていましたがunbindで行うようにしました)。
  • コントローラの異常終了時はh5.core.controllerManagerでlifecycleerrorイベントが上がるようにしました。
  • __constructでunbind()は呼べないようにしました。
  • unbind()を呼んだ時に、まだresolveもrejectもされていないライフサイクルプロミスがあった場合、reject()するようにしました。(今までdisposeのタイミングで行っていましたがunbindで行うようにしました)。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 26, 2014

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 27, 2014

fukudayasuo
#367 __disposeの返すpromiseがrejectされた時の処理を共通化しました。
__disposeの返すpromiseがrejectされた場合はdispose()の返すプロミスもrejectします。
nullifyは行わず、lifecycleerrorイベントが上がります。

@simdy simdy added this to the v1.1.12 milestone Jun 27, 2014

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 27, 2014

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 27, 2014

fukudayasuo
#367 unbindされたコントローラのメソッドを呼ぶケースを追加。
_h5errorcodeに追加したエラーコードを記述

@simdy simdy added the enhancement label Jul 1, 2014

@simdy simdy closed this Jul 1, 2014

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment