                                                     userId: self.userId,
                                                     alias: self.alias,
                                                 hadPersistedDistinctId: self.hadPersistedDistinctId), apiToken: self.apiToken)
+            if let completion = completion {
+                DispatchQueue.main.async(execute: completion)
+            }
         }
         
         if MixpanelInstance.isiOSAppExtension() {

     - parameter alias:      A unique identifier that you want to use as an identifier for this user.
     - parameter distinctId: The current user identifier.
     - parameter usePeople: boolean that controls whether or not to set the people distinctId to the event distinctId.
     This should only be set to false if you wish to prevent people profile updates for that user.
     */
    open func createAlias(_ alias: String, distinctId: String, usePeople: Bool = true) {
        if hasOptedOutTracking() {
            return
        }

     
     - parameter distinctId: string that uniquely identifies the current user
     - parameter usePeople: boolean that controls whether or not to set the people distinctId to the event distinctId.
                            This should only be set to false if you wish to prevent people profile updates for that user.
     - parameter completion: an optional completion handler for when the identify has completed.
     */
    open func identify(distinctId: String, usePeople: Bool = true, completion: (() -> Void)? = nil) {
        if hasOptedOutTracking() {
            return
        }
