Skip to content

Commit a50c93d

Browse files
Merge pull request #336 from preactjs/suspense-rethrow
fix: suspended error not re-thrown
2 parents 797c82f + c46fb59 commit a50c93d

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

.changeset/cuddly-spoons-impress.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'preact-render-to-string': patch
3+
---
4+
5+
Fix error thrown after suspending not being rethrown.

src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,8 @@ function _renderToString(
467467
try {
468468
return renderChildren();
469469
} catch (e) {
470+
if (!e || typeof e.then !== 'function') throw e;
471+
470472
return e.then(
471473
() => renderChildren(),
472474
() => renderNestedChildren()

test/compat/async.test.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,32 @@ describe('Async renderToString', () => {
137137

138138
expect(rendered).to.equal(expected);
139139
});
140+
141+
it('should rethrow error thrown after suspending', async () => {
142+
const { suspended, getResolved } = createSuspender();
143+
144+
function Suspender() {
145+
if (!getResolved()) {
146+
throw suspended.promise;
147+
}
148+
149+
throw new Error('fail');
150+
}
151+
152+
const promise = renderToStringAsync(
153+
<Suspense fallback={<div>loading...</div>}>
154+
<Suspender />
155+
</Suspense>
156+
);
157+
158+
let msg = '';
159+
try {
160+
suspended.resolve();
161+
await promise;
162+
} catch (err) {
163+
msg = err.message;
164+
}
165+
166+
expect(msg).to.equal('fail');
167+
});
140168
});

test/utils.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ export function createSuspender() {
2727
}
2828

2929
return {
30+
getResolved() {
31+
return resolved;
32+
},
3033
suspended: deferred,
3134
Suspender
3235
};

0 commit comments

Comments
 (0)