Estoy usando el método de manejo de errores usando el tipo de Result , que publiqué en esta pregunta .
Usando el tipo Result , podría construir fácilmente una cadena de funciones como esta
Result.combine(result1, result2) .onFailure(err => doSomethingOnFailure()) .onSuccess(val => doSomethingOnSuccess())Este flujo se ve bien para mí, pero tengo un problema.
function func(a, b) { // Some code above const result = Result.comine(aResult, bResult).onFailure(err => { // I want to return fail result to the func here but do not know how }).onSuccess(() => { // Do something on success }) // So I have to do a simple if check if (result.failure) { // Return fail result here } // Then do something on success here } Quiero devolver el resultado fallido a la función principal dentro de la función onFailure .
¿Podría de alguna manera lograr esto?
En lugar de escribir dos métodos separados onFailure y onSuccess que simplemente ejecutan un efecto secundario y devuelven la instancia de Result en sí, use un método único para ambos controladores que devuelva el resultado de la llamada respectiva:
handle<U>(onSuccess: (value: T) => U, onFailure: (error: string) => U): U { if (this.success) { return onSuccess(this._value); } else { return onFailure(this.error); } }