def update!(&cb)
      done = false
      EM.synchrony do
        multi = EM::Synchrony::Multi.new
        multi.add :profile, update_profile!
        multi.add :contacts, update_contacts!
        multi.add :chats, update_chats!
        multi.perform
        done = true
      end

      check_done = Proc.new {
        if done
          @starts_at = Time.now
          cb.call unless cb.nil?
          logger.info("Successfully loaded all information")
        else
          EM.next_tick(&check_done)
        end
      }
      EM.add_timer(0, &check_done)
    end
def update!(&cb)
      done = false
      EM.synchrony do
        multi = EM::Synchrony::Multi.new
        multi.add :profile, update_profile!
        multi.add :contacts, update_contacts!
        multi.add :chats, update_chats!
        multi.perform
        done = true
      end

      check_done = Proc.new {
        if done
          @starts_at = Time.now
          cb.call unless cb.nil?
          logger.info("Successfully loaded all information")
        else
          EM.next_tick(&check_done)
        end
      }
      EM.add_timer(0, &check_done)
    end
Update user profile, contacts and chats

 @api private