Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

247
Vistas
Deshágase de los errores no detectados al resolver una promesa

tengo el siguiente metodo

 export abstract class BaseCalculator { /** * Compute the promise parameter. * @param name name of the parameter. * @param method promise to resolve. * @returns CalculatorResult. */ public async computeParameter(name: string, method: Promise<string | number | boolean | ParamString>): Promise<CalculatorResult> { try { return Promise.resolve(method) .then( (computedValue: string | number | boolean | ParamString) => this.getCalculatorResult(name, computedValue) ) .catch((e: string | CalculatorError) => ({ // <<<<<<<<<<<<<<<<< HERE name: name, value: e instanceof CalculatorError ? e.value : NaN, error: e instanceof CalculatorError ? e : new CalculatorError(name, NaN, ErrorLevel.ERROR, e) } as CalculatorResult)); } catch (e) { // <<<<<<<<<<<<<<<<< HERE return { name: name, value: e instanceof CalculatorError ? e.value : NaN, error: e instanceof CalculatorError ? e : new CalculatorError(name, NaN, ErrorLevel.ERROR, String(e)) } as CalculatorResult; } }

Lo rodeo con try/catch dos veces, una externa, la segunda en promise.resolve, sin embargo, todavía obtengo los errores no detectados cuando ejecuto los method pasados como parámetro a esa función de computeParameter de parámetros.

ingrese la descripción de la imagen aquí

¿Alguien podría explicar cómo capturar todos los errores arrojados al ejecutar tales funciones asíncronas?

a continuación hay un código que termina siendo llamado por uno de los métodos que paso en el parámetro

 export function displayMessage(field: string, value: any, message: string, errorLevel: ErrorLevel): void { throw new CalculatorError(field, value, errorLevel, message) } export async function checkAngleSTR( STA: EnumSTA, KUNIT: number, STR: number, NEDSF: number, BFL: number, HFL: number, FCTM: number, ): Promise<void> { let ac: number = BFL * HFL; switch (STA) { case EnumSTA.EN1992_1_1_BS: case EnumSTA.EN1992_2_BS: case EnumSTA.EN_1992_3_BS: if (STR < 21.8 || STR > 45) { displayMessage("STR", NaN, "L'angle d'inclinaison de la bielle doit être compris entre 21.8° et 45°", ErrorLevel.ERROR); } break;
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Está utilizando .then / .catch en una función etiquetada como async (y nunca use await en esa función); esta puede ser la razón por la cual los errores se deslizan entre las grietas

Por lo tanto, haga que computeParameter sea así

(nota, no hay async aquí, ya que nunca se usa await )

 computeParameter(name, method) { return method .then((computedValue) => this.getCalculatorResult(name, computedValue)) .catch(e) => ({ name, value: e instanceof CalculatorError ? e.value : NaN, error: e instanceof CalculatorError ? e : new CalculatorError(name, NaN, ErrorLevel.ERROR, e) })); }

o ... usando async / await

 async computeParameter(name, method) { try { const computedValue = await method; return this.getCalculatorResult(name, computedValue); } catch (e) { return { name, value: e instanceof CalculatorError ? e.value : NaN, error: e instanceof CalculatorError ? e : new CalculatorError(name, NaN, ErrorLevel.ERROR, e) }; } }

Eliminé la sintaxis "mecanografiado" para que el código sea más claro y, como usted dice, el mecanografiado es irrelevante para el problema

Usando cualquiera de estos, el error lanzado por displayMessage ahora debería ser capturado y manejado correctamente

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda