     @discardableResult public final func onSuccess(call handler: @escaping (T) -> ()) -> Promise<T, E> {
         if let result = state.value {
             completionQueue >>> handler ** result
-        } else {
+        } else if case .waiting = state {
             successHandlers.append(handler)
         }
         return self

    @discardableResult public final func onError(call handler: @escaping (E) -> ()) -> Promise<T, E> {
        if let error = state.error {
            completionQueue >>> handler ** error
        } else {
            errorHandlers.append(handler)
        }
        return self

    public func cancel() {
        guard case .waiting = state else { return }
        state = .cancelled
        cancelHandlers => { $0() }
        successHandlers = []
        errorHandlers = []
