Saltar al contenido principal

Either

El patrón either es un patrón de diseño utilizado en programación orientada a objetos para permitir la selección entre dos opciones o estados posibles. Este patrón se basa en el principio de encapsulación y promueve el bajo acoplamiento entre las clases o componentes involucrados.

El patrón either se utiliza comúnmente cuando se tiene una operación o función que puede devolver uno de dos resultados diferentes. En lugar de devolver directamente el resultado, se encapsula en un objeto "either" que contiene información sobre el resultado y permite realizar acciones en consecuencia.

El objeto either tiene dos estados posibles: "izquierda" (left) y "derecha" (right). Cada estado puede contener un resultado diferente. Por ejemplo, en un escenario de manejo de errores, el estado "izquierda" podría contener información sobre un error ocurrido, mientras que el estado "derecha" podría contener el resultado esperado.

Este patrón permite manejar de manera elegante y eficiente situaciones en las que es necesario considerar múltiples resultados posibles. Al utilizar el patrón either, se evita el uso de excepciones o valores especiales para representar condiciones excepcionales, lo que puede mejorar la legibilidad y mantenibilidad del código.

info

La mayoria de las apis del sdk utilizan este patron para el manejo de errores

Podemos acceder directamente al resultado por ejemplo de una transaccion.

const erc20Api = sdk.transactions.erc20Api
const transaction = await erc20Api.transfer(payload, caller);

const result = transaction.right() // Obtener el resultado o undefined

Left

Podemos acceder al error de una transaccion.

const erc20Api = sdk.transactions.erc20Api
const transaction = await erc20Api.transfer(payload, caller);

const error = transaction.left() // Obtener el error o undefined

Fold

Con este metodo tenemos la opcion de poder reaccionar a ambos estados sin usar try catch.

const erc20Api = sdk.transactions.erc20Api
const transaction = await erc20Api.transfer(payload, caller);

transaction.fold(
(error) => {
console.log(`Handle error ${error}`);
},
(id) => {
console.log(`Handle transaction ${id}`);
}
);
Try catch

Esto no quiere decir que no se pueda utilizar la sentencia try catch en tu codigo cuando utilices el sdk. Lo que quiere decir es que menos probable que debas utilizarlo para manejar exepciones controladas por el sdk. Las exepciones son eso, exepcionales y solo utilizas esta sentencia para manejar errores exepcionales.

Web3 error

Normalmente las transacciones y el uso que se le da a los either en el sdk son para el manejo de errores controlados. Y esto devolvera un objeto con la interfaz Web3Error.

interface Web3Error {
code: number;
message: string;
}