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

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

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 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!