-
Notifications
You must be signed in to change notification settings - Fork 795
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
bug: exception in an async componentWillLoad method will break the rendering cycle #5824
Closed
3 tasks done
wittemann opened this issue
Jun 10, 2024
· 3 comments
· Fixed by #5826 or ionic-team/ionic-framework#29666
Closed
3 tasks done
bug: exception in an async componentWillLoad method will break the rendering cycle #5824
wittemann opened this issue
Jun 10, 2024
· 3 comments
· Fixed by #5826 or ionic-team/ionic-framework#29666
Labels
Bug: Validated
This PR or Issue is verified to be a bug within Stencil
Comments
Hey @wittemann 👋 Can confirm there is a discrepancy between Stencil handling errors in synchronous and async lifecycle methods. I'm working on a solution and should have a fix up soon, hopefully 🤞 Thanks for reporting! |
2 tasks
Thanks for the quick fix @tanner-reits. Much appreciated! |
A fix for this was included in today's v4.19.0 release! |
github-merge-queue bot
pushed a commit
to ionic-team/ionic-framework
that referenced
this issue
Jun 26, 2024
### Release Notes <details> <summary>ionic-team/stencil (@​stencil/core)</summary> ### [`v4.19.0`](https://github.com/ionic-team/stencil/blob/HEAD/CHANGELOG.md#-4190-2024-06-26) [Compare Source](https://github.com/ionic-team/stencil/compare/v4.18.3...v4.19.0) ### Bug Fixes * **compiler:** support rollup's external input option ([#3227](stenciljs/core#3227)) ([2c68849](stenciljs/core@2c68849)), fixes [#3226](stenciljs/core#3226) * **emit:** don't emit test files ([#5789](stenciljs/core#5789)) ([50892f1](stenciljs/core@50892f1)), fixes [#5788](stenciljs/core#5788) * **hyrdate:** support vdom annotation in nested dsd structures ([#5856](stenciljs/core#5856)) ([61bb5e3](stenciljs/core@61bb5e3)) * label attribute not toggling input ([#3474](stenciljs/core#3474)) ([13db920](stenciljs/core@13db920)), fixes [#3473](stenciljs/core#3473) * **mock-doc:** expose ShadowRoot and DocumentFragment globals ([#5827](stenciljs/core#5827)) ([98bbd7c](stenciljs/core@98bbd7c)), fixes [#3260](stenciljs/core#3260) * **runtime:** allow watchers to fire w/ no Stencil members ([#5855](stenciljs/core#5855)) ([850ad4f](stenciljs/core@850ad4f)), fixes [#5854](stenciljs/core#5854) * **runtime:** catch errors in async lifecycle methods ([#5826](stenciljs/core#5826)) ([87e5b33](stenciljs/core@87e5b33)), fixes [#5824](stenciljs/core#5824) * **runtime:** don't register listener before connected to DOM ([#5844](stenciljs/core#5844)) ([9d7021f](stenciljs/core@9d7021f)), fixes [#4067](stenciljs/core#4067) * **runtime:** properly assign style declarations ([#5838](stenciljs/core#5838)) ([5c10ebf](stenciljs/core@5c10ebf)) * **testing:** allow to re-use pages across it blocks ([#5830](stenciljs/core#5830)) ([561eab4](stenciljs/core@561eab4)), fixes [#3720](stenciljs/core#3720) * **typescript:** remove unsupported label property ([#5840](stenciljs/core#5840)) ([d26ea2b](stenciljs/core@d26ea2b)), fixes [#3473](stenciljs/core#3473) ### Features * **cli:** support generation of sass and less files ([#5857](stenciljs/core#5857)) ([1883812](stenciljs/core@1883812)), closes [#2155](stenciljs/core#2155) * **compiler:** generate export maps on build ([#5809](stenciljs/core#5809)) ([b6d2404](stenciljs/core@b6d2404)) * **complier:** support type import aliasing ([#5836](stenciljs/core#5836)) ([7ffb25d](stenciljs/core@7ffb25d)), closes [#2335](stenciljs/core#2335) * **runtime:** support declarative shadow DOM ([#5792](stenciljs/core#5792)) ([c837063](stenciljs/core@c837063)), closes [#4010](stenciljs/core#4010) * **testing:** add `toHaveLastReceivedEventDetail` event spy matcher ([#5829](stenciljs/core#5829)) ([63491de](stenciljs/core@63491de)), closes [#2488](stenciljs/core#2488) * **testing:** allow to disable network error logging via 'logFailingNetworkRequests' option ([#5839](stenciljs/core#5839)) ([dac3e33](stenciljs/core@dac3e33)), closes [#2572](stenciljs/core#2572) * **testing:** expose captureBeyondViewport in pageCompareScreenshot ([#5828](stenciljs/core#5828)) ([cf6a450](stenciljs/core@cf6a450)), closes [#3188](stenciljs/core#3188) </details>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Prerequisites
Stencil Version
v4.18.3
Current Behavior
The test setup contains two components, one parent component and one child. The child component does have an issue and throws an error in its componentWillLoad function. Depending on the type of function (async or not) the code will behave different.
The sync case
The error will be logged to the console but the whole application sill works as good as possible. The parent seems to be unaffected by that and the child component has been rendered.
The async case
The behavior changes and the rendering of the child and the parent is stoped. The child is also not rendered. It seems to be in a state where it can not recover and keep on working.
Expected Behavior
The async case should behave like the sync case. In any case, the child should not be able to break the rendering cycle of the parent.
System Info
Steps to Reproduce
Code Reproduction URL
https://github.com/wittemann/async-componentWillLoad-issue
Additional Information
I tried to dig down into the stencil code a bit and it seems to be rooted here:
https://github.com/ionic-team/stencil/blob/main/src/runtime/update-component.ts#L98
In the async case, the
safeCall
method will not catch the exception and with that, the returned promise will go into theenqueue
function which is waiting for the promise to be fulfilled which will never happen as it will be rejected. Therefore, theupdateComponent
function is not going to be called.The text was updated successfully, but these errors were encountered: