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

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

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