code: func (w *watchQueue) Dequeue() (string, *kvdb.KVPair, error) {
  	w.m.Lock()
  	for {
  		if w.updates.Len() > 0 {
  			el := w.updates.Front()
  			w.updates.Remove(el)
  			w.m.Unlock()
  			update := el.Value.(*watchUpdate)
  			return update.key, update.kvp, update.err
  		}
  		w.cv.Wait()
  	}
  }
docs: // Dequeue removes from queue.