public Disposable observe()

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);
      }
    };
  }