@@ -444,35 +444,32 @@ function populateHydratingStateForQueue(registry: DehydratedBlockRegistry, queue
444444
445445// Waits for the next render cycle to complete
446446function nextRender ( injector : Injector ) : Promise < void > {
447- let resolve : VoidFunction ;
448- const promise = new Promise < void > ( ( resolveFn ) => {
449- resolve = resolveFn ;
450- } ) ;
451- afterNextRender ( ( ) => resolve ( ) , { injector} ) ;
452- return promise ;
447+ return new Promise < void > ( ( resolveFn ) => afterNextRender ( resolveFn , { injector} ) ) ;
453448}
454449
455- function triggerResourceLoadingForHydration (
450+ async function triggerResourceLoadingForHydration (
456451 dehydratedBlockId : string ,
457452 dehydratedBlockRegistry : DehydratedBlockRegistry ,
458- ) {
459- let resolve : Function ;
460- const promise = new Promise ( ( resolveFn ) => ( resolve = resolveFn ) ) ;
453+ ) : Promise < void > {
461454 const deferBlock = dehydratedBlockRegistry . get ( dehydratedBlockId ) ;
462455 // Since we trigger hydration for nested defer blocks in a sequence (parent -> child),
463456 // there is a chance that a defer block may not be present at hydration time. For example,
464457 // when a nested block was in an `@if` condition, which has changed.
465- if ( deferBlock !== null ) {
466- const { tNode, lView} = deferBlock ;
467- const lDetails = getLDeferBlockDetails ( lView , tNode ) ;
468- onDeferBlockCompletion ( lDetails , ( ) => resolve ( ) ) ;
469- triggerDeferBlock ( TriggerType . Hydrate , lView , tNode ) ;
470-
458+ if ( deferBlock === null ) {
471459 // TODO(incremental-hydration): handle the cleanup for cases when
472460 // defer block is no longer present during hydration (e.g. `@if` condition
473461 // has changed during hydration/rendering).
462+
463+ return ;
474464 }
475- return promise ;
465+
466+ const { tNode, lView} = deferBlock ;
467+ const lDetails = getLDeferBlockDetails ( lView , tNode ) ;
468+
469+ return new Promise < void > ( ( resolve ) => {
470+ onDeferBlockCompletion ( lDetails , resolve ) ;
471+ triggerDeferBlock ( TriggerType . Hydrate , lView , tNode ) ;
472+ } ) ;
476473}
477474
478475/**
@@ -490,7 +487,7 @@ function onDeferBlockCompletion(lDetails: LDeferBlockDetails, callback: VoidFunc
490487 * Determines whether specific trigger types should be attached during an instruction firing
491488 * to ensure the proper triggers for a given type are used.
492489 */
493- export function shouldAttachTrigger ( triggerType : TriggerType , lView : LView , tNode : TNode ) {
490+ export function shouldAttachTrigger ( triggerType : TriggerType , lView : LView , tNode : TNode ) : boolean {
494491 if ( triggerType === TriggerType . Regular ) {
495492 return shouldAttachRegularTrigger ( lView , tNode ) ;
496493 } else if ( triggerType === TriggerType . Hydrate ) {
@@ -506,7 +503,7 @@ export function shouldAttachTrigger(triggerType: TriggerType, lView: LView, tNod
506503 * `deferOn*` and `deferHydrateOn*` triggers, to make sure only one of the trigger
507504 * types is active for a block with the current state.
508505 */
509- function shouldAttachRegularTrigger ( lView : LView , tNode : TNode ) {
506+ function shouldAttachRegularTrigger ( lView : LView , tNode : TNode ) : boolean {
510507 const injector = lView [ INJECTOR ] ;
511508
512509 const tDetails = getTDeferBlockDetails ( lView [ TVIEW ] , tNode ) ;
0 commit comments