---
title: "Stream.on() | Grafana k6 documentation"
description: "Set up handler functions for various events on the GRPC stream."
---

> For a curated documentation index, see [llms.txt](/llms.txt). For the complete documentation index, see [llms-full.txt](/llms-full.txt).

# Stream.on()

Set up handler functions for various events on the gRPC stream.

Expand table

| Parameter | Type                                                                               | Description                                  |
|-----------|------------------------------------------------------------------------------------|----------------------------------------------|
| event     | string                                                                             | The event name to define a handler for.      |
| handler   | [`EventHandler`](/docs/k6/latest/javascript-api/k6-net-grpc/stream/event-handler/) | The function to call when the event happens. |

Possible events:

Expand table

| Event name | Description                                                                                                                                                             |
|------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| data       | Emitted when the server sends data.                                                                                                                                     |
| error      | Emitted when an error occurs. In case of the error, an [`Error`](/docs/k6/latest/javascript-api/k6-net-grpc/stream/stream-error/) object sends to the handler function. |
| end        | Emitted when the server closes the incoming stream.                                                                                                                     |

### Example

JavaScript ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```javascript
import { Client, Stream } from 'k6/net/grpc';
import { sleep } from 'k6';

const client = new Client();
client.load([], '../../grpc_server/route_guide.proto');

export default () => {
  if (__ITER == 0) {
    client.connect('127.0.0.1:10000', { plaintext: true });
  }

  const stream = new Stream(client, 'main.RouteGuide/RecordRoute');

  // sets up a handler for the data (server sends data) event
  stream.on('data', (stats) => {
    console.log('Finished trip with', stats.pointCount, 'points');
    console.log('Passed', stats.featureCount, 'features');
    console.log('Traveled', stats.distance, 'meters');
    console.log('It took', stats.elapsedTime, 'seconds');
  });

  // sets up a handler for the end event (stream closes)
  stream.on('end', function () {
    // The server has finished sending
    client.close();
    console.log('All done');
  });

  // sets up a handler for the error event (an error occurs)
  stream.on('error', function (e) {
    // An error has occurred and the stream has been closed.
    console.log('Error: ' + JSON.stringify(e));
  });

  sleep(1);
};
```
