Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

261
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda