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

305
Visualizações
Indefinido esto en función de orden superior (nestjs)

Estoy tratando de implementar alguna función básica de orden superior que devolvería una nueva función con la función provista rodeada con el bloque try catch. Algo como esto:

 function wrapLogging(f) { return async (...args) => { try { await f(...args); } catch (e) { log(e); }; } } // dummy example: const executeAndLog = wrapLogging(executeFunction); executeAndLog(); // nestjs controller and service example: @Post('/create') async executeAndLog() { const executeAndLog = wrapLogging(this.exampleService.create); await executeAndLog(); }

Ahora el problema es que obtengo errores indefinidos al proporcionar this.exampleService.create. "Error de tipo: no se pueden leer las propiedades de undefined..." Entiendo que falta el contexto, pero no sé cómo 'conectarlo'. Intenté buscar ejemplos en Google y encontré un problema similar con las soluciones .call o .apply, pero no funcionó en este caso. ¿Quizás se deba a que el método de servicio proporcionado es asíncrono o tiene algo que ver con los servicios de nestjs y su contexto?

¡Cualquier ayuda es muy apreciada! ty

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Para usar un enfoque como este, debe reconocer que el léxico this se pierde al usar la function s. Puede usar .bind() para volver a vincular this al método, de modo que aún pueda usar this dentro del método. Lo siguiente funciona para mantener this pero permitiéndole envolver sus métodos

aplicación.controlador.ts

 import { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; function wrapLogging(f: (...args: any[]) => any) { console.log('Calling method'); console.log(f); return async (...args) => { try { return await f(...args); } catch (e) { console.log(e); } }; } @Controller() export class AppController { constructor(private readonly appService: AppService) {} @Get() async getHello(): Promise<string> { const method = wrapLogging(this.appService.getHello.bind(this.appService)); return method(); } }

aplicación.servicio.ts

 import { Injectable } from '@nestjs/common'; @Injectable() export class AppService { private greeting = 'Hello World!'; getHello(): string { console.log('Returning greeting'); console.log(this); return this.greeting; } }

llamada HTTP

 xh :3000 HTTP/1.1 200 OK Connection: keep-alive Content-Length: 12 Content-Type: text/plain; charset=utf-8 Date: Tue, 08 Mar 2022 16:01:19 GMT Keep-Alive: timeout=5 Hello World!

registros

 Calling method [Function: bound getHello] Returning greeting AppService { greeting: 'Hello World!' }

Sugeriría seguir la ruta de un decorador y modificar descriptor.value en lugar de una función separada, ya que deberá hacer este bind cada vez que quiera envolver su método, pero al final depende de usted.

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