                 onRejected.removeAll(keepCapacity: false)
             case .Deferred(let promise):
                 assert(promise !== self, "A promise referencing itself causes an unbreakable retain cycle, and an infinite loop")
-                
-                promise.thenOn(
+                self.result = Result(promise.thenOn(
                     synchronizationQueue,
                     onFulfilled: { [weak self] (value: T) -> Result<T> in
                         let result: Result<T> = Result(value)

                onFulfilled.removeAll(keepCapacity: false)
                onRejected.removeAll(keepCapacity: false)
            case .Failure(let reason):
                state = .Rejected
                for rejectHandler in onRejected {
                    rejectHandler(reason)

        }

        let isCancelled: () -> Bool = { [weak self] in
            return self == nil
        }
        
        resolver(fulfill: weakFulfill, reject: weakReject, isCancelled: isCancelled)
