There are differences between observables and signals:
- Signals always have value;
- Signals don't push the new value - they notify their consumers, but the consumer should pull the value. Because of this, the consumer can only read the latest value, not every update that happened before the value was pulled;
- Signals don't have the "complete" state.
For example, if you would track keydown
events using signals, you would not be able to collect information on what keys were pressed between the moments when you read the signal.
If you would try to use a signal for a network request, you would quickly find out that your signal should have the value before you get the response, and that you can not detect if the request is completed. You could use undefined as an initial value, but that would be a one-time signal usage - that's not what they are designed for, and it wouldn't resolve the "completeness" issue for the requests that can return more than one response.
As far as I understand, you use EventEmitter to represent the application state ("where the user is located in any moment of time"), so signals should be a good fit here - there will be always an initial value, there is no "complete" stage for this information. The only thing you need to change if you don't need to know about every change of this information and react to every change (as we often do in the case of router events).