fix: properly handle multiple promises

This commit is contained in:
cha0s 2024-07-04 09:09:26 -05:00
parent e02a63e7b5
commit 447774f0da

View File

@ -11,6 +11,7 @@ const Modulators = {
export default function lfo(object, properties) {
const oscillators = {};
const promises = [];
for (const key in properties) {
const property = properties[key];
const oscillator = {
@ -34,25 +35,33 @@ export default function lfo(object, properties) {
}
}
oscillator.low = oscillator.median - oscillator.magnitude / 2;
oscillator.promise = new Promise((resolve) => {
oscillator.stop = resolve;
});
oscillator.promise.then(() => {
delete oscillators[key];
});
promises.push(oscillator.promise);
oscillators[key] = oscillator;
}
let stop;
const promise = new TickingPromise(
(resolve) => {
stop = resolve;
Promise.all(promises).then(resolve);
},
(elapsed, resolve) => {
(elapsed) => {
for (const key in oscillators) {
const oscillator = oscillators[key];
oscillator.elapsed += elapsed;
if (oscillator.elapsed >= oscillator.frequency) {
if (0 === --oscillator.count) {
resolve();
oscillator.stop();
return;
}
oscillator.elapsed = oscillator.elapsed % oscillator.frequency;
}
const x = ((oscillator.offset + oscillator.elapsed) / oscillator.frequency) % 1;
const x = (oscillator.offset + (oscillator.elapsed / oscillator.frequency)) % 1;
let y = 0;
for (const modulator of oscillator.modulators) {
y += modulator(x);