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

174
Vistas
¿Cómo usar AsyncLocalStorage para un Observable?

Me gustaría usar AsyncLocalStorage en un interceptor de NestJs :

 export interface CallHandler<T = any> { handle(): Observable<T>; } export interface NestInterceptor<T = any, R = any> { intercept(context: ExecutionContext, next: CallHandler<T>): Observable<R> | Promise<Observable<R>>; }

La función de interceptor obtiene un CallHandler next que devuelve un Observable .

No puedo usar run en este caso (la devolución de llamada de ejecución se cerrará inmediatamente antes de que termine el observable callHandler.handle() ):

 intercept(context: ExecutionContext, callHandler: CallHandler): Observable<any> | Promise<Observable<any>> { const asyncLocalStorage = new AsyncLocalStorage(); const myStore = { some: 'data'}; return asyncLocalStorage.run(myStore, () => callHandler.handle()); }

Ver ejemplo de repetición rota

La solución que se me ocurrió es esta:

 const localStorage = new AsyncLocalStorage(); export class MyInterceptor implements NestInterceptor { intercept(context: ExecutionContext, callHandler: CallHandler): Observable<any> | Promise<Observable<any>> { const resource = new AsyncResource('AsyncLocalStorage', { requireManualDestroy: true }); const myStore = { some: 'data' }; localStorage.enterWith(myStore); return callHandler.handle().pipe( finalize(() => resource.emitDestroy()) ); } }

Ver ejemplo de repetición de trabajo

Esto parece funcionar bien, pero no estoy seguro de si esto es realmente correcto, y parece desordenado y propenso a errores. Entonces me pregunto:

  1. ¿Es esto correcto en absoluto?
  2. ¿Hay una manera mejor/más limpia de manejar esto?
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Cómo estoy usando cls-hooks , la solución que encontré fue:

 return new Observable(observer => { namespace.runAndReturn(async () => { namespace.set("some", "data") next.handle() .subscribe( res => observer.next(res), error => observer.error(error), () => observer.complete() ) }) })
over 4 years ago · Santiago Trujillo 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