fix(ivy): init hooks being re-run if an exception is throw (#28024)

Fixes Ivy running the init hooks if an exception is thrown in one of them.

These changes fix FW-830.

PR Close #28024
This commit is contained in:
Kristiyan Kostadinov
2019-01-09 21:28:38 +01:00
committed by Andrew Kushnir
parent 3bafc002ae
commit a6ba789599
2 changed files with 30 additions and 29 deletions

View File

@ -319,11 +319,14 @@ export function leaveView(newView: LView): void {
if (isCreationMode(lView)) {
lView[FLAGS] &= ~LViewFlags.CreationMode;
} else {
executeHooks(lView, tView.viewHooks, tView.viewCheckHooks, checkNoChangesMode);
// Views are clean and in update mode after being checked, so these bits are cleared
lView[FLAGS] &= ~(LViewFlags.Dirty | LViewFlags.FirstLViewPass);
lView[FLAGS] |= LViewFlags.RunInit;
lView[BINDING_INDEX] = tView.bindingStartIndex;
try {
executeHooks(lView, tView.viewHooks, tView.viewCheckHooks, checkNoChangesMode);
} finally {
// Views are clean and in update mode after being checked, so these bits are cleared
lView[FLAGS] &= ~(LViewFlags.Dirty | LViewFlags.FirstLViewPass);
lView[FLAGS] |= LViewFlags.RunInit;
lView[BINDING_INDEX] = tView.bindingStartIndex;
}
}
enterView(newView, null);
}