Saltar al contenido principal

Bus de Eventos

El bus de eventos es un objeto que se puede obtener a traves de la propiedad events del sdk. Se utiliza para suscribirse a los eventos emitidos por los clientes y servicios de Alfa.

const eventBus = sdk.events;

Suscribirse a un evento

El bus de eventos posee un metodo registerHandler que permite suscribirse a un evento. Este metodo recibe como parametro el nombre del evento al que se desea suscribirse y una funcion asincrona que se ejecutara cada vez que se emita el evento.

eventBus.registerHandler<MintAssetEvent>(MintAssetEvent.eventName, async (event) => {
console.log(`New asset minted: ${event.payload.asset.assetId}`);
});
Tipado de eventos

La funcion registerHandler es generica y recibe como parametro el tipo de evento al que se desea suscribirse. Esto permite que la funcion que se ejecuta al emitirse el evento tenga acceso al payload del evento con el tipo correcto.

caution

La funcion de registro debe ser asyncrona por consideraciones de diseño del sdk.

Nombres de eventos

Los nombres de los eventos se pueden obtener a traves de la propiedad eventName de cada evento. Ver la seccion Lista de eventos disponibles para ver la lista de eventos disponibles.

Desuscribirse de un evento

La funcion registerHandler devuelve un objeto de tipo EventSubscription que permite desuscribirse del evento al que se suscribio. Para desuscribirse, se debe llamar al metodo unsubscribe del objeto EventSubscription.

const subscription = eventBus.registerHandler<MintAssetEvent>(MintAssetEvent.eventName, async(event) => {
console.log(`New asset minted: ${event.payload.asset.assetId}`);
});

subscription.unsubscribe(); // Deja de escuchar el evento

Compatibilidad con rxjs

El objeto EventSubscription es compatible con la interfaz Subscription de rxjs, por lo que se puede utilizar el metodo unsubscribe de rxjs para desuscribirse de un evento.

const subs$ = new Subscription(); // Esto es de rxjs

subs$.add(eventBus.registerHandler<MintAssetEvent>(MintAssetEvent.eventName, async(event) => {
console.log(`New asset minted: ${event.payload.asset.assetId}`);
}));

subs$.unsubscribe(); // Deja de escuchar el evento