Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
fukudayasuo opened this issue Jun 20, 2014 · 2 comments
Assignees
Milestone

Comments

@fukudayasuo
Copy link

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

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

  • 初期化完了前にコントローラが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
内部からエラーのために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
ライフサイクルイベントでdispose()を呼んだ時に__unbindや__disposeで起きたエラーが飲まれていたので修正しました。
fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 23, 2014
emergencyイベントをlifecycleerrorイベントにリネームしました。
__disposeで例外が起きた時に、dispose()の返すプロミスがrejectされるようにし、lifecycleerrorイベントが上がるようにしました。
failReason→rejectReasonにリネームしました。
fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 24, 2014
hifive#334 h5controllerunboundイベントは、管理対象に追加されたコントローラについてのみ上がるようにしました。
fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 24, 2014
コントローラのテンプレートロードやライフサイクルの返すプロミスの失敗など、非同期処理による失敗が原因でdisposeControllerされるときに、nullifyしないようにしました。
テストケースをそれに合わせて修正しました。
fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Jun 24, 2014
エラー時、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
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
unbind済みのコントローラのメソッドを呼ばないように修正しました。
@fukudayasuo
Copy link
Author

  • コントローラの異常終了時は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
__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
@simdy simdy closed this as completed Jul 1, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants