__readyで例外が発生する時に、コンソールにその例外が表示されない場合がある #328

Closed
fukudayasuo opened this Issue May 28, 2014 · 3 comments

Comments

Projects
None yet
2 participants
@fukudayasuo

コントローラの__readyで例外が発生した場合、コントローラはdisposeされて、__unbind、__disposeのライフサイクルイベントが実行される。この時、__unbind、__disposeでも例外が発生すると、その例外で処理が止まってしまい、__readyの例外を投げる処理が実行されない。

h5.core.controller('body', {
    __name: 'A',
    __ready: function() {
        notexistingFuncA(); // 存在しない関数でエラー
    },

    __unbind: function() {
        notexistingFuncB(); // 存在しない関数でエラー
    }
});

上記のようなコードで、notexsitingFuncA()の呼び出しについてのエラーが表示されず、notexistingFuncB()の呼び出しについてのエラーのみが表示される。

__readyでも__unbind(または__dispose)でもエラーが発生する場合は、コンソールに両方のエラーが表示されるようにする。

@fukudayasuo

This comment has been minimized.

Show comment
Hide comment
@fukudayasuo

fukudayasuo May 28, 2014

ライフサイクルイベントで例外が発生した場合、そのcatch節でsetTimeoutを使って非同期で例外を投げて、dispose処理を行うようにする。
そうすると、__readyで投げた例外もdispose処理中の例外もコンソールに表示される。

ライフサイクルイベントで例外が発生した場合、そのcatch節でsetTimeoutを使って非同期で例外を投げて、dispose処理を行うようにする。
そうすると、__readyで投げた例外もdispose処理中の例外もコンソールに表示される。

@fukudayasuo

This comment has been minimized.

Show comment
Hide comment
@fukudayasuo

fukudayasuo May 30, 2014

関連 #329
__unbind,__disposeで例外が発生した場合は、非同期で例外オブジェクトが投げられ、unbind,disposeの処理は継続するようになりました。

#329 の対応によって、本issueの問題も解決しました。
__ready,__unbind,__disposeで例外を投げるコントローラをバインドした場合の挙動は、

  1. コントローラがdisposeされる
  2. __readyの例外が投げられる
  3. __unbindの例外が投げられる
  4. __disposeの例外が投げらる
    の順番で起きます。コンソールにも全ての例外オブジェクトのエラーが表示されます。

関連 #329
__unbind,__disposeで例外が発生した場合は、非同期で例外オブジェクトが投げられ、unbind,disposeの処理は継続するようになりました。

#329 の対応によって、本issueの問題も解決しました。
__ready,__unbind,__disposeで例外を投げるコントローラをバインドした場合の挙動は、

  1. コントローラがdisposeされる
  2. __readyの例外が投げられる
  3. __unbindの例外が投げられる
  4. __disposeの例外が投げらる
    の順番で起きます。コンソールにも全ての例外オブジェクトのエラーが表示されます。

@simdy simdy added this to the v1.1.11 milestone Jun 3, 2014

@simdy simdy added the duplicate label Jun 3, 2014

@simdy simdy modified the milestones: v1.1.12, v1.1.11 Jun 9, 2014

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

@simdy simdy removed the duplicate label Jun 26, 2014

@fukudayasuo

This comment has been minimized.

Show comment
Hide comment
@fukudayasuo

fukudayasuo Jun 26, 2014

#367 で対応しました。
ライフサイクルイベントで例外が発生した場合、最初に発生した例外オブジェクトを投げるようになりました。

例えば__readyで例外が発生して、コントローラがdisposeされるとき、__unbind,__disposeも実行されますが、もし__unbind,__disposeで例外が発生したとしても、最終的に最初に送出された__readyで発生した例外をdispose処理完了後に投げるようになりました。

#367 で対応しました。
ライフサイクルイベントで例外が発生した場合、最初に発生した例外オブジェクトを投げるようになりました。

例えば__readyで例外が発生して、コントローラがdisposeされるとき、__unbind,__disposeも実行されますが、もし__unbind,__disposeで例外が発生したとしても、最終的に最初に送出された__readyで発生した例外をdispose処理完了後に投げるようになりました。

@simdy simdy closed this Jun 27, 2014

@simdy simdy added the enhancement label Jun 27, 2014

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