code: func nodesWatch(params map[string]interface{}) (WatcherFunc, error) {
  	stale := false
  	if err := assignValueBool(params, "stale", &stale); err != nil {
  		return nil, err
  	}
  
  	fn := func(p *Plan) (BlockingParamVal, interface{}, error) {
  		catalog := p.client.Catalog()
  		opts := makeQueryOptionsWithContext(p, stale)
  		defer p.cancelFunc()
  		nodes, meta, err := catalog.Nodes(&opts)
  		if err != nil {
  			return nil, nil, err
  		}
  		return WaitIndexVal(meta.LastIndex), nodes, err
  	}
  	return fn, nil
  }
docs: // nodesWatch is used to watch the list of available nodes