push(data = []) {
    data = Array.isArray(data) ? data : [data];

    // Add the new items onto the pending items.
    const itemsToProcess = this.pendingItems.concat(data);

    // Chunk the pending items into batches and add onto the queue
    const batches = chunk(itemsToProcess, this.batchSize);
    debug('generated batches %s from %s items', batches.length, data.length);

    batches.forEach((batch) => {
      // If this batch is full or the queue is empty queue it for processing.
      if (batch.length === this.batchSize || !this.queue.length()) {
        this._pushToQueue(batch);
      } else {
      // Otherwise, it store it for later.
        debug('the last batch with only %s item is deferred (partial batch)', batch.length);
        this.pendingItems = batch;
      }
    });

    debug('batches in queue: %s', this.queue.length());
    debug('items in deferred queue: %s', this.pendingItems.length);
  }
Add a new contact, or an array of contacts, to the end of the queue.

@param {Array|Object} data A contact or array of contacts.