run () {
    return new Promise((resolve, reject) => {
      this.animation = this.animationFn()
      this.animation.play()
      this.animation.complete = resolve
    })
  }
Starts the animation, returning a cancellable promise that resolves when
animation completes.