Fetch API does not support getReader (response.body is undefined)
Description
When trying to read the response from Fetch as a stream, via getReader(), I get an error saying that resp.body is undefined. Logging the value of resp shows this:
{"_bodyBlob": {"_data": {"__collector": [Object], "blobId": "xxx", "name": "chat.txt", "offset": 0, "size": 42, "type": "text/plain"}}, "_bodyInit": {"_data": {"__collector": [Object], "blobId": "xxx", "name": "chat.txt", "offset": 0, "size": 42, "type": "text/plain"}}, "bodyUsed": false, "headers": {"map": {"cache-control": "no-store", "content-length": "42", "content-type": "text/plain; charset=utf-8", "date": "Sun, 21 May 2023 18:53:09 GMT", "expect-ct": "max-age=2592000, report-uri=\"https://sentry.repl.it/api/10/security/?sentry_key=xxx\"", "replit-cluster": "hacker", "strict-transport-security": "max-age=6123043; includeSubDomains", "uwebsockets": "20"}}, "ok": true, "status": 200, "statusText": "", "type": "default", "url": "https://xxx.luisafk.repl.co/chat"}
Duplicate of #25701 and #25910, but they were closed.
React Native Version
0.71.7
Output of npx react-native info
System:
OS: macOS 12.6.3
CPU: (8) x64 Intel(R) Core(TM) i7-6920HQ CPU @ 2.90GHz
Memory: 346.30 MB / 16.00 GB
Shell: 5.8.1 - /bin/zsh
Binaries:
Node: 19.7.0 - ~/.nvm/versions/node/v19.7.0/bin/node
Yarn: 1.22.15 - ~/.nvm/versions/node/v19.7.0/bin/yarn
npm: 9.5.0 - ~/.nvm/versions/node/v19.7.0/bin/npm
Watchman: Not Found
Managers:
CocoaPods: Not Found
SDKs:
iOS SDK: Not Found
Android SDK: Not Found
IDEs:
Android Studio: Not Found
Xcode: /undefined - /usr/bin/xcodebuild
Languages:
Java: Not Found
npmPackages:
@react-native-community/cli: Not Found
react: 18.2.0 => 18.2.0
react-native: 0.71.7 => 0.71.7
react-native-macos: Not Found
npmGlobalPackages:
*react-native*: Not Found
Steps to reproduce
Try the code example below.
Snack, code example, screenshot, or link to a repository
const resp = await fetch('https://example.com');
const reader = resp.body.getReader();
| :warning: | Newer Version of React Native is Available! |
|---|---|
| :information_source: | You are on a supported minor version, but it looks like there's a newer patch available - 0.71.8. Please upgrade to the highest patch for your minor or latest and verify if the issue persists (alternatively, create a new project and repro the issue in it). If it does not repro, please let us know so we can close out this issue. This helps us ensure we are looking at issues that still exist in the most recent releases. |
I upgraded and it still does not work.
Same issue: respnse.json() is valid, however response.body is undefined
This issue has been lingering in RN for so long and many people have complained about it. As it stands now fetch within RN is not spec complaint https://github.com/facebook/react-native/issues/27741
Any update? Do I have to use third party fetch?
Since what I wanted to do was streaming, I ended up using WebSockets, but this should really just be fixed.
This issue is stale because it has been open 180 days with no activity. Remove stale label or comment or this will be closed in 7 days.
Typical react native negligence
On Sun, 25 Feb 2024 at 4:01 pm, github-actions[bot] < @.***> wrote:
This issue is stale because it has been open 180 days with no activity. Remove stale label or comment or this will be closed in 7 days.
— Reply to this email directly, view it on GitHub https://github.com/facebook/react-native/issues/37505#issuecomment-1962813611, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABHCJEIXFXJP2TICTVKMJGLYVLAR7AVCNFSM6AAAAAAYJSHQZWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNRSHAYTGNRRGE . You are receiving this because you commented.Message ID: @.***>
With all the AI APIs using SSE this is becoming more and more important. I can use websockets for internal streaming, but where we need to support SSE style APIs that's not an option. Most commercial APIs will prefer to offer streaming over HTTP.
I managed to find a solution here: #27741