in mobius-core/src/main/java/com/spotify/mobius/MobiusLoop.java [186:214]
public Disposable observe(final Consumer<M> observer) {
if (runState == RunState.DISPOSED) {
throw new IllegalStateException(
"This loop has already been disposed. You cannot observe a disposed loop");
}
if (runState == RunState.DISPOSING) {
// ignore observation requests on a disposing loop
return () -> {};
}
FireAtLeastOnceObserver<M> wrapped = new FireAtLeastOnceObserver<>(observer);
modelObservers.add(wrapped);
final M currentModel = mostRecentModel;
if (currentModel != null) {
// Start by emitting the most recently received model, if one hasn't already been emitted
// because of a racing model update
wrapped.acceptIfFirst(currentModel);
}
return new Disposable() {
@Override
public void dispose() {
modelObservers.remove(wrapped);
}
};
}