Skip to content

Commit 06b7c97

Browse files
committed
Throw for returned rejected promises
1 parent 3cabe09 commit 06b7c97

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

packages/e2e-tests/plugins/interactive-blocks/generator-scope/render.php

+1
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@
1515
<button type="button" data-wp-on--click="callbacks.reject" data-testid="reject">Async reject</button>
1616
<button type="button" data-wp-on--click="callbacks.capture" data-testid="capture">Async capture</button>
1717
<button type="button" data-wp-on--click="callbacks.captureThrow" data-testid="captureThrow">Async captureThrow</button>
18+
<button type="button" data-wp-on--click="callbacks.captureReturnReject" data-testid="captureReturnReject">Async captureReturnReject</button>
1819
</div>

packages/e2e-tests/plugins/interactive-blocks/generator-scope/view.js

+10
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,15 @@ const { callbacks } = store( 'test/generator-scope', {
3939
getContext().result = err.toString();
4040
}
4141
},
42+
*returnReject() {
43+
return Promise.reject( new Error( '🔚' ) );
44+
},
45+
*captureReturnReject() {
46+
try {
47+
yield callbacks.returnReject();
48+
} catch ( err ) {
49+
getContext().result = err.toString();
50+
}
51+
},
4252
},
4353
} );

packages/interactivity/src/utils.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,11 @@ export function withScope( func: ( ...args: unknown[] ) => unknown ) {
163163
error = e;
164164
}
165165
if ( it.done ) {
166-
break;
166+
if ( error ) {
167+
throw error;
168+
} else {
169+
break;
170+
}
167171
}
168172
}
169173

test/e2e/specs/interactivity/async-actions.spec.ts

+10
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,14 @@ test.describe( 'async actions', () => {
4848
await page.getByTestId( 'captureThrow' ).click();
4949
await expect( resultInput ).toHaveValue( 'Error: 🤯' );
5050
} );
51+
52+
test( 'Promise generator callbacks should throw when rejected promises are returned', async ( {
53+
page,
54+
} ) => {
55+
const resultInput = page.getByTestId( 'result' );
56+
await expect( resultInput ).toHaveValue( '' );
57+
58+
await page.getByTestId( 'captureReturnReject' ).click();
59+
await expect( resultInput ).toHaveValue( 'Error: 🔚' );
60+
} );
5161
} );

0 commit comments

Comments
 (0)