function* errorView() {
let resolve, reject;
const p = new Promise((res, rej) => {
resolve = res, reject = rej;
}),
timer = Promises.delay(5000).then(() => {
throw Error('time\'s up!');
}),
yep = Object.assign(html`<button>Resolve`, {
onclick() { resolve('Done!') }
}),
nope = Object.assign(html`<button>Reject`, {
onclick() { reject(Error('Not gonna happen')) }
});
yield html`<div>Stand by, we're "loading" (5sec max). ${yep} ${nope}`;
yield Promise.race([p, timer]).then(data => html`<div>${data}`)
}