diff --git a/src/internal/await-block.js b/src/internal/await-block.js index 3d8be35edc..e9c25ec370 100644 --- a/src/internal/await-block.js +++ b/src/internal/await-block.js @@ -1,5 +1,5 @@ import { assign, isPromise } from './utils.js'; -import { group_outros } from './transitions.js'; +import { check_outros, group_outros, on_outro } from './transitions.js'; import { flush } from '../internal/scheduler.js'; export function handlePromise(promise, info) { @@ -18,10 +18,12 @@ export function handlePromise(promise, info) { info.blocks.forEach((block, i) => { if (i !== index && block) { group_outros(); - block.o(() => { + on_outro(() => { block.d(1); info.blocks[i] = null; }); + block.o(); + check_outros(); } }); } else { diff --git a/test/runtime/samples/await-with-components/Widget.html b/test/runtime/samples/await-with-components/Widget.html new file mode 100644 index 0000000000..ec9e3471fe --- /dev/null +++ b/test/runtime/samples/await-with-components/Widget.html @@ -0,0 +1,5 @@ +{value} + + \ No newline at end of file diff --git a/test/runtime/samples/await-with-components/_config.js b/test/runtime/samples/await-with-components/_config.js new file mode 100644 index 0000000000..ffef7441ff --- /dev/null +++ b/test/runtime/samples/await-with-components/_config.js @@ -0,0 +1,29 @@ +export default { + async test({ assert, component, target }) { + let resolve, reject; + let promise = new Promise(ok => resolve = ok); + + component.promise = promise; + assert.htmlEqual(target.innerHTML, 'Loading...'); + + resolve(42); + await promise; + assert.htmlEqual(target.innerHTML, '42'); + + promise = new Promise((ok, fail) => reject = fail); + component.promise = promise; + assert.htmlEqual(target.innerHTML, 'Loading...'); + + reject(99); + await promise.then(null, () => {}); + assert.htmlEqual(target.innerHTML, '99'); + + promise = new Promise(ok => resolve = ok); + component.promise = promise; + assert.htmlEqual(target.innerHTML, 'Loading...'); + + resolve(1); + await promise; + assert.htmlEqual(target.innerHTML, '1'); + } +}; diff --git a/test/runtime/samples/await-with-components/main.html b/test/runtime/samples/await-with-components/main.html new file mode 100644 index 0000000000..84894997e1 --- /dev/null +++ b/test/runtime/samples/await-with-components/main.html @@ -0,0 +1,12 @@ +{#await promise} + +{:then result} + +{:catch err} + +{/await} + + \ No newline at end of file