Spring handles the method which are annotated with @Async in the way that it creates a new thread in which the method will be executed. This annotation is intended to be used on method which require extensive use of the CPU, in order to free the main thread. Both threads can access the same memory space and can use the already created objects.
Javascript by nature is single threaded and runs the code asynchronously, that means that the whole code runs in one thread and accessing existing memory space from other threads is not allowed. That's the reason why when running node.js applications in production we want to create as much instances as there are CPU cores on the machine, in order to use the machine's resources efficiently. In order for this to work without side effects the application need to be stateless, meaning that we can't store any local data (Sessions, WebSockets, Connection) in the process.
As a result of the way that Node works we can't implement the @Async as it is implemented in Spring (note: new threads can not access the existing scope). We can use the webworkers-threads library to instantiate new threads where the async code will run, but note that we can't access the existing scope and communication with the new thread is similar as IPC (with serialized JSON). This package moves the blocking CPU bound tasks out of the node event loop and in separate Javascript threads that run in parallel in the background and use all of the available CPU cores automatically all within a single Node process. However, we should find and implement the most suitable way for developers to use it.
Background
Spring supports running code in a new thread from methods annotated with @Async annotation. Example: https://spring.io/guides/gs/async-method/
Goal
Have support for running code in a new worker from methods decorated with @Async decorator.