I have a question regarding AsyncLocalStorage and Interceptors in NestJS.
Will there be any implications of storing a transaction (EntityManager) inside the AsyncLocalStorage? I created an interceptor to wrap my requests inside a transaction and I store the manager so that anything inside that request can use it.
My main concerns are:
- Is AsyncLocalStorage suitable to store this kind of complex objects?
 - Can I encounter any unwanted behavior by unwrapping the request Observable into promise and then wrapping it again?
 - Is there something else?
 
I'm running NestJS 8 using Express 4.17.3 with node 16.4.2
Here is the code of my interceptor:
import {
  CallHandler,
  ExecutionContext,
  Injectable,
  NestInterceptor
} from '@nestjs/common'
import { AsyncLocalStorage } from 'async_hooks'
import { from, lastValueFrom, Observable } from 'rxjs'
import { getManager } from 'typeorm'
const transactionStorage = new AsyncLocalStorage()
@Injectable()
export class TransactionInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    return from(
      getManager().transaction((manager) => {
        return transactionStorage.run(manager, () => {
          return lastValueFrom(next.handle())
        })
      })
    )
  }
}