         }
         return newPromise
     }
-    
-    
+}
+
+// Tap and always provide points to observe a chain of results no matter whether things are failing or succeeding:
+public extension Promise {
     public func tap(
         on q: DispatchQueue  = BasicPromise<Void>.defaultQueue,
         execute body: @escaping (Result<FulfilledValue>) -> Void

            fulfillBasic(.rejected(error))
        }
    }
}


public extension Promise {
    
    public typealias PendingTuple = (promise: Promise, fulfill: (FulfilledValue) -> Void, reject: (Error) -> Void)
    

    {
        basicPromise = basis
    }
    
    // Following PromiseKit's convention, the public initializer and static method also supply the fulfill and reject routines for the created Promise:

    public  init(
        resolvers: (
