Выполнять несколько рекурсивных обещаний и прерывать их по запросу

Ortix92 спросил: 26 декабря 2017 в 07:41 в: javascript

Я работаю над инструментом анимации светодиодных лент, который позволяет пользователю выбирать несколько эффектов, которые могут работать одновременно. Каждый эффект - это обещание (синяя птица). Существует один метод run(), который устанавливает цвет светодиодной полосы.

Все обещания выполняются с фиксированным FPS с использованием метода delay.

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()

Есть ли какая-то структура данных, которую я могу использовать, где я могу включить и выключить рекурсивное обещание? Другими словами, как я могу сигнализировать об эффекте (рекурсивное обещание), чтобы остановить рекурсию?

Я думал о массиве, содержащем все обещания. Но тогда я не знаю, как разбить / разрешить рекурсивное обещание, когда оно больше не находится в массиве. Я мог бы сделать чек, прежде чем я return будет ли само обещание внутри массива, но я надеялся, что есть более элегантный способ.

0 ответов