code: func (p *Promise) Get(c context.Context) (interface{}, error) {
  	// If we have an onGet function, run it (deferred case).
  	if p.onGet != nil {
  		p.onGet(c)
  	}
  
  	// Block until at least one of these conditions is satisfied. If both are,
  	// "select" will choose one pseudo-randomly.
  	select {
  	case <-p.signalC:
  		return p.data, p.err
  
  	case <-c.Done():
  		// Make sure we don't actually have data.
  		select {
  		case <-p.signalC:
  			return p.data, p.err
  
  		default:
  			return nil, c.Err()
  		}
  	}
  }
docs: // Get returns the promise's value. If the value isn't set, Get will block until
  // the value is available, following the Context's timeout parameters.
  //
  // If the value is available, it will be returned with its error status. If the
  // context times out or is cancelled, the appropriate context error will be
  // returned.