Merge pull request #980 from sveltejs/gh-974-975

Fix #974 and #975
pull/987/head
Rich Harris 7 years ago committed by GitHub
commit 9ad4de761f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -67,7 +67,7 @@ export default function visitAwaitBlock(
${old_block}.u(); ${old_block}.u();
${old_block}.d(); ${old_block}.d();
${await_block}.c(); ${await_block}.c();
${await_block}.m(${anchor}.parentNode, ${anchor}); ${await_block}.m(${state.parentNode || `${anchor}.parentNode`}, ${anchor});
} }
} }
@ -142,6 +142,10 @@ export default function visitAwaitBlock(
`); `);
} }
block.builders.unmount.addBlock(deindent`
${await_block}.u();
`);
block.builders.destroy.addBlock(deindent` block.builders.destroy.addBlock(deindent`
${await_token} = null; ${await_token} = null;
${await_block}.d(); ${await_block}.d();

@ -0,0 +1,49 @@
let fulfil;
let thePromise = new Promise(f => {
fulfil = f;
});
export default {
data: {
thePromise
},
html: `
<div><p>loading...</p></div>
`,
test(assert, component, target) {
fulfil(42);
return thePromise
.then(() => {
assert.htmlEqual(target.innerHTML, `
<div><p>the value is 42</p></div>
`);
let reject;
thePromise = new Promise((f, r) => {
reject = r;
});
component.set({
thePromise
});
assert.htmlEqual(target.innerHTML, `
<div><p>loading...</p></div>
`);
reject(new Error('something broke'));
return thePromise.catch(() => {});
})
.then(() => {
assert.htmlEqual(target.innerHTML, `
<div><p>oh no! something broke</p></div>
`);
});
}
};

@ -0,0 +1,9 @@
<div>
{{#await thePromise}}
<p>loading...</p>
{{then theValue}}
<p>the value is {{theValue}}</p>
{{catch theError}}
<p>oh no! {{theError.message}}</p>
{{/await}}
</div>

@ -0,0 +1,45 @@
let fulfil;
const thePromise = new Promise(f => {
fulfil = f;
});
export default {
data: {
show: true,
thePromise
},
html: `
<p>loading...</p>
`,
test(assert, component, target) {
fulfil(42);
return thePromise
.then(() => {
assert.htmlEqual(target.innerHTML, `
<p>the value is 42</p>
`);
component.set({
show: false
});
assert.htmlEqual(target.innerHTML, `
<p>Else</p>
`);
component.set({
show: true
});
return thePromise.then(() => {
assert.htmlEqual(target.innerHTML, `
<p>the value is 42</p>
`);
});
});
}
};

@ -0,0 +1,11 @@
{{#if show}}
{{#await thePromise}}
<p>loading...</p>
{{then theValue}}
<p>the value is {{theValue}}</p>
{{catch theError}}
<p>oh no! {{theError.message}}</p>
{{/await}}
{{else}}
<p>Else</p>
{{/if}}
Loading…
Cancel
Save