Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

245
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!