diff --git a/packages/react-server/src/ReactFlightServerTemporaryReferences.js b/packages/react-server/src/ReactFlightServerTemporaryReferences.js index e368b2e8007..e28b603edf9 100644 --- a/packages/react-server/src/ReactFlightServerTemporaryReferences.js +++ b/packages/react-server/src/ReactFlightServerTemporaryReferences.js @@ -70,6 +70,9 @@ const proxyHandlers = { `Instead, you can export a Client Component wrapper ` + `that itself renders a Client Context Provider.`, ); + // Allow returning a temporary reference from an async function + case 'then': + return undefined; } throw new Error( // eslint-disable-next-line react-internal/safe-string-coercion diff --git a/packages/react-server/src/__tests__/ReactFlightServerTemporaryReferences-test.js b/packages/react-server/src/__tests__/ReactFlightServerTemporaryReferences-test.js new file mode 100644 index 00000000000..7e93179268d --- /dev/null +++ b/packages/react-server/src/__tests__/ReactFlightServerTemporaryReferences-test.js @@ -0,0 +1,36 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @emails react-core + * @jest-environment node + */ + +'use strict'; + +let ReactFlightServerTemporaryReferences; + +describe('ReactFlightServerTemporaryReferences', () => { + beforeEach(() => { + jest.resetModules(); + ReactFlightServerTemporaryReferences = require('react-server/src/ReactFlightServerTemporaryReferences'); + }); + + it('can return a temporary reference from an async function', async () => { + const temporaryReferenceSet = + ReactFlightServerTemporaryReferences.createTemporaryReferenceSet(); + const temporaryReference = + ReactFlightServerTemporaryReferences.createTemporaryReference( + temporaryReferenceSet, + 'test', + ); + + async function foo() { + return temporaryReference; + } + + await expect(foo()).resolves.toBe(temporaryReference); + }); +});