From fe634a8e042584e5b9d132901f3c2d026ba59c06 Mon Sep 17 00:00:00 2001 From: mtrelis Date: Thu, 16 Jan 2020 14:09:17 +0100 Subject: [PATCH] c --- src/runtime/internal/transitions.ts | 30 ++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/runtime/internal/transitions.ts b/src/runtime/internal/transitions.ts index 14f2f1faa4..a9711c26e7 100644 --- a/src/runtime/internal/transitions.ts +++ b/src/runtime/internal/transitions.ts @@ -159,6 +159,19 @@ export function create_out_transition(node: Element & ElementCSSInlineStyle, fn: group.r += 1; + function started(){ + add_render_callback(() => dispatch(node, false, 'start')); + } + + function ended(){ + dispatch(node, false, 'end'); + if (!--group.r){ + // this will result in `end()` being called, + // so we don't need to clean up here + run_all(group.c); + } + } + function go() { const { delay = 0, @@ -173,20 +186,14 @@ export function create_out_transition(node: Element & ElementCSSInlineStyle, fn: const start_time = now() + delay; const end_time = start_time + duration; - add_render_callback(() => dispatch(node, false, 'start')); + started(); loop(now => { if (running) { if (now >= end_time) { tick(0, 1); - dispatch(node, false, 'end'); - - if (!--group.r) { - // this will result in `end()` being called, - // so we don't need to clean up here - run_all(group.c); - } + ended(); return false; } @@ -208,11 +215,8 @@ export function create_out_transition(node: Element & ElementCSSInlineStyle, fn: go(); }); } else if (config && config.then) { - add_render_callback(() => dispatch(node, false, 'start')); - config.then(() => { - dispatch(node, false, 'end'); - if (!--group.r) run_all(group.c); - }); + started(); + config.then(ended).catch(ended) } else { go(); }