Execute várias promessas recursivas e quebre quando solicitado

Estou trabalhando em uma ferramenta de animação de faixa de LED que permite ao usuário selecionar vários efeitos que podem ser executados simultaneamente. Cada efeito é uma promessa (pássaro azul). Existe um únicorun() método que define a cor da faixa de LED.

Todas as promessas são executadas em um FPS fixo usando odelay método.

run(mode) {
    return this.setStripColor(this.color).delay(1 / this.fps).then(() => { this.run(1 / this.fps) })
}

// example of an effect
rainbowSweep() {
    // .. 
    // magical unicorn code
    // ..
    return Promise.resolve().delay(1 / this.fps).then(() => {
        this.rainbowSweep()
    })

app.rainbowSweep()
app.run()

Existe algum tipo de estrutura de dados que eu possa usar para ativar e desativar uma promessa recursiva? Em outras palavras, como sinalizo para que o efeito (a promessa recursiva) pare de se repetir?

Eu estava pensando em uma matriz contendo todas as promessas. Mas não sei como quebrar / resolver uma promessa recursiva quando ela não está mais na matriz. Eu poderia fazer uma verificação antes dereturn se a promessa em si está dentro da matriz, mas eu esperava que houvesse uma maneira mais elegante.

questionAnswers(3)

yourAnswerToTheQuestion