code: func synchronousFunc(c *asticontext.Canceller, l listenable, fn func(), eventNameDone string) (e Event) {
  	var ctx, cancel = c.NewContext()
  	defer cancel()
  	l.On(eventNameDone, func(i Event) (deleteListener bool) {
  		e = i
  		cancel()
  		return true
  	})
  	fn()
  	<-ctx.Done()
  	return
  }
docs: // synchronousFunc executes a function, blocks until it has received a specific event or the canceller has been
  // cancelled and returns the corresponding event