Merge pull request #2004 from sveltejs/gh-1995

Update await-block to use on_outro and check_outros - #1995
pull/2007/head
Rich Harris 6 years ago committed by GitHub
commit add3b303dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,5 +1,5 @@
import { assign, isPromise } from './utils.js'; 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'; import { flush } from '../internal/scheduler.js';
export function handlePromise(promise, info) { export function handlePromise(promise, info) {
@ -18,10 +18,12 @@ export function handlePromise(promise, info) {
info.blocks.forEach((block, i) => { info.blocks.forEach((block, i) => {
if (i !== index && block) { if (i !== index && block) {
group_outros(); group_outros();
block.o(() => { on_outro(() => {
block.d(1); block.d(1);
info.blocks[i] = null; info.blocks[i] = null;
}); });
block.o();
check_outros();
} }
}); });
} else { } else {

@ -0,0 +1,5 @@
{value}
<script>
export let value = 'Loading...';
</script>

@ -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');
}
};

@ -0,0 +1,12 @@
{#await promise}
<Widget />
{:then result}
<Widget value="{result}" />
{:catch err}
<Widget value="{err}" />
{/await}
<script>
import Widget from './Widget.html';
export let promise = Promise.resolve();
</script>
Loading…
Cancel
Save