Skip to content
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

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

Closed
fukudayasuo opened this issue May 28, 2014 · 3 comments
Assignees
Milestone

Comments

@fukudayasuo
Copy link

コントローラの__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
Copy link
Author

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

@fukudayasuo
Copy link
Author

関連 #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
Copy link
Author

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

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

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