Skip to content

Commit

Permalink
Merge branch 'master' into gh-640
Browse files Browse the repository at this point in the history
  • Loading branch information
Rich-Harris committed Dec 5, 2017
2 parents 0d42ff8 + 9ad4de7 commit 1636f17
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/generators/dom/visitors/AwaitBlock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ export default function visitAwaitBlock(
${old_block}.u();
${old_block}.d();
${await_block}.c();
${await_block}.m(${anchor}.parentNode, ${anchor});
${await_block}.m(${state.parentNode || `${anchor}.parentNode`}, ${anchor});
}
}
Expand Down Expand Up @@ -142,6 +142,10 @@ export default function visitAwaitBlock(
`);
}

block.builders.unmount.addBlock(deindent`
${await_block}.u();
`);

block.builders.destroy.addBlock(deindent`
${await_token} = null;
${await_block}.d();
Expand Down
49 changes: 49 additions & 0 deletions test/runtime/samples/await-then-catch-anchor/_config.js
Original file line number Diff line number Diff line change
@@ -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>
`);
});
}
};
9 changes: 9 additions & 0 deletions test/runtime/samples/await-then-catch-anchor/main.html
Original file line number Diff line number Diff line change
@@ -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>
45 changes: 45 additions & 0 deletions test/runtime/samples/await-then-catch-if/_config.js
Original file line number Diff line number Diff line change
@@ -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>
`);
});
});
}
};
11 changes: 11 additions & 0 deletions test/runtime/samples/await-then-catch-if/main.html
Original file line number Diff line number Diff line change
@@ -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}}

0 comments on commit 1636f17

Please sign in to comment.