Sample code for 30+ languages & platforms
React Native

Read the REST Response Body in Chunks

See more REST Examples

Demonstrates Rest.ReadRespChunkBd, which reads the response body one chunk at a time, appending each chunk to a BinData. A return value of 0 signals the body is complete, while -1 indicates a read failure.

Background. Chunked reading lets an application process a large response incrementally rather than buffering the entire body at once. It is used after ReadResponseHeader within the staged request model.

Chilkat React Native Downloads

React Native
import { BinData, Rest, StringBuilder } from '@chilkat/react-native'

async function chilkatExample() {
  const rest = new Rest();
  const bTls = true;
  const bAutoReconnect = true;
  try {
    await rest.connectAsync('example.com', 443, bTls, bAutoReconnect);
  } catch {
    console.log(rest.lastErrorText);
    return;
  }

  try {
    await rest.sendReqNoBodyAsync('GET', '/api/largefile');
  } catch {
    console.log(rest.lastErrorText);
    return;
  }

  const statusCode = await rest.readResponseHeaderAsync();
  if (statusCode < 0) {
    console.log(rest.lastErrorText);
    return;
  }

  // Check for the expected success status code.  If the response is not 200, the body is likely
  // error text formatted as JSON, XML, or HTML rather than the expected content.  In that case read
  // the body as text, report it, and return.
  if (statusCode !== 200) {
    const sbError = new StringBuilder();
    try {
      await rest.readRespSbAsync(sbError);
    } catch {
      console.log(rest.lastErrorText);
      return;
    }

    console.log(`Request failed with status code ${statusCode}`);
    console.log(sbError.getAsString());
    return;
  }

  // The status code is 200.  Read the response body in chunks, appending each chunk to the BinData.
  // Each call waits until at least the requested number of bytes is available, unless the response
  // ends first.  A return value of 0 means the final bytes were returned and the body is complete;
  // -1 indicates a read failure.
  const bdBody = new BinData();
  let chunkResult = await rest.readRespChunkBdAsync(8192, bdBody);
  while (chunkResult > 0) {
    chunkResult = await rest.readRespChunkBdAsync(8192, bdBody);
  }

  if (chunkResult < 0) {
    console.log(rest.lastErrorText);
    return;
  }

  console.log(`Received ${bdBody.numBytes} bytes.`);
}