in any system that will ever exist, attaching listeners is async.
any system that ever uses an event driven style will emit events async.
there is no compromise to make there it’s a mistake to do so any other way
Should event emission always be asynchronous?
There are some use cases of where event emitters are used synchronously because there is a taste for the design pattern, but I think it makes little sense. You should always try to invoke a function as you invoke every other function if that’s essentially what your application is doing. Sync event emitters are not entirely uncommon but I do think they are a bad design choice and should be avoided.
I should probably also mention that sync event emitters make sense in JavaScript when you want to simulate an event occurring for the purpose of testing, but I do think it should otherwise be driven by an async event emitter.