

# Escritura de funciones de Lambda habilitadas para la transmisión de respuestas
<a name="config-rs-write-functions"></a>

Escribir el controlador para las funciones de transmisión de respuestas es diferente a escribir los patrones de controlador típicos. Al escribir funciones de transmisión, asegúrese de realizar lo siguiente:
+ Encapsula la función con el decorador `awslambda.streamifyResponse()`. El entorno de tiempo de ejecución Node.js de Lambda proporciona el objeto global `awslambda`.
+ Finalice la transmisión de manera correcta para asegurarse de que se haya completado todo el procesamiento de datos.

## Configuración de una función de controlador para transmitir respuestas
<a name="config-rs-write-functions-handler"></a>

Para indicar al tiempo de ejecución que Lambda debe transmitir las respuestas de su función, debe ajustar la función al decorador `streamifyResponse()`. Esto indica al tiempo de ejecución que utilice la ruta lógica adecuada para transmitir las respuestas y permite que la función transmita las respuestas.

El decorador `streamifyResponse()` acepta una función que acepta los siguientes parámetros:
+ `event`: proporciona información sobre el evento de invocación de la URL de función, como el método HTTP, los parámetros de consulta y el cuerpo de la solicitud.
+ `responseStream`: proporciona una transmisión con escritura permitida.
+ `context`: proporciona métodos y propiedades con información acerca de la invocación, la función y el entorno de ejecución.

El objeto `responseStream` es un [`writableStream` de Node.js](https://nodesource.com/blog/understanding-streams-in-nodejs/). Al igual que con cualquier transmisión de este tipo, debe utilizar el método `pipeline()`.

**nota**  
El entorno de tiempo de ejecución Node.js de Lambda proporciona automáticamente el objeto global `awslambda` y no se requiere ninguna importación.

**Example controlador habilitado para transmisión de respuestas**  

```
import { pipeline } from 'node:stream/promises';
import { Readable } from 'node:stream';

export const echo = awslambda.streamifyResponse(async (event, responseStream, _context) => {
  // As an example, convert event to a readable stream.
  const requestStream = Readable.from(Buffer.from(JSON.stringify(event)));

  await pipeline(requestStream, responseStream);
});
```

Si bien `responseStream` ofrece el método `write()` para escribir en la transmisión, le recomendamos que utilice [https://nodejs.org/api/stream.html#streampipelinesource-transforms-destination-callback](https://nodejs.org/api/stream.html#streampipelinesource-transforms-destination-callback) siempre que sea posible. El uso de `pipeline()` garantiza que la transmisión con escritura permitida no se sature por una transmisión legible más rápida.

## Finalización de la transmisión
<a name="config-rs-write-functions-end"></a>

Asegúrese de finalizar la transmisión correctamente antes de que el controlador regrese. El método `pipeline()` gestiona esto de manera automática.

Para otros casos de uso, llame al método `responseStream.end()` para finalizar correctamente una transmisión. Este método indica que no se deben escribir más datos en la transmisión. Este método no es necesario si escribe a la transmisión con `pipeline()` o `pipe()`.

A partir de Node.js 24, Lambda ya no espera a que se cumplan las promesas no resueltas una vez que el controlador regrese o finalice el flujo de respuesta. Si su función depende de operaciones asíncronas adicionales, como temporizadores o recuperaciones, debería incluirlas en la `await` de su controlador.

**Example Ejemplo de finalización de una transmisión con pipeline()**  

```
import { pipeline } from 'node:stream/promises';

export const handler = awslambda.streamifyResponse(async (event, responseStream, _context) => {
  await pipeline(requestStream, responseStream);
});
```

**Example Ejemplo de finalización de una transmisión sin pipeline()**  

```
export const handler = awslambda.streamifyResponse(async (event, responseStream, _context) => {
  responseStream.write("Hello ");
  responseStream.write("world ");
  responseStream.write("from ");
  responseStream.write("Lambda!");
  responseStream.end();
});
```