     ///   - completion: Gets called when the future is resolved.
     public func on(success: ((Value) -> Void)? = nil, failure: ((Error) -> Void)? = nil, completion: ((Result) -> Void)? = nil) {
         let scheduler = self.scheduler ?? Scheduler.default
-        cascadeImmediately { result in
+        _cascade { result in
             scheduler {
                 switch result {
                 case let .success(value): success?(value)

}

extension Future where Error == Never {
    func cascade(success: @escaping (Value) -> Void) {
        cascade(success: success, failure: { _ in fatalError("Future<Value, Never> can't produce an error") })
    }


    func cascade(completion: @escaping (Result) -> Void) {
        if let scheduler = self.scheduler {
            _cascade { result in
                scheduler { completion(result) }
            }
        } else {
            _cascade(completion: completion)
        }
    }

    private func _cascade(completion: @escaping (Result) -> Void) {
        switch resolver {
        case let .promise(promise):
            promise.observe(completion: completion)
