From 9ceb501265a134ad2b8d238d201003d9e37fe292 Mon Sep 17 00:00:00 2001 From: velvettear Date: Thu, 24 Feb 2022 11:52:16 +0100 Subject: [PATCH] move some more code from promises to async/await --- libs/blinkstick.js | 137 ++++++++++++++++++++------------------------- 1 file changed, 61 insertions(+), 76 deletions(-) diff --git a/libs/blinkstick.js b/libs/blinkstick.js index 98e53b5..8e8d2fa 100644 --- a/libs/blinkstick.js +++ b/libs/blinkstick.js @@ -31,106 +31,94 @@ async function findBlinkstick(index) { // simple animation (set the color / morph to color) async function simple(config) { - try { - await forceStop(); - config.timestamp = new Date().getTime(); - let indices = getIndices(config); - for (let index = 0; index < indices.length; index++) { + await forceStop(); + config.timestamp = new Date().getTime(); + let indices = getIndices(config); + for (let index = 0; index < indices.length; index++) { + try { await setLedState(indices[index], LED_ANIMATED); await singleAnimation(JSON.parse(JSON.stringify(config)), indices[index]); + } finally { await clearLedState(indices[index]); } - return { - status: 'ok', - color: config.color, - indices: indices, - time: (new Date().getTime() - config.timestamp) + 'ms' - }; - } catch (err) { - logger.error(err); - return err; } + return { + status: 'ok', + color: config.color, + indices: indices, + time: (new Date().getTime() - config.timestamp) + 'ms' + }; } // complex animation (pulse / blink) async function complex(config) { - try { - if (config.timestamp === undefined) { - await powerOff({id: Math.random(), mode: MODE_POWEROFF, color: '#000000', options: {index: LEDS_ALL}}); - config.timestamp = new Date().getTime(); - } - let indices = getIndices(config); - for (let index = 0; index < indices.length; index++) { + if (config.timestamp === undefined) { + await powerOff({id: Math.random(), mode: MODE_POWEROFF, color: '#000000', options: {index: LEDS_ALL}}); + config.timestamp = new Date().getTime(); + } + let indices = getIndices(config); + for (let index = 0; index < indices.length; index++) { + try { if (shouldLedFinish(config)) { return {status: 'ok', time: (new Date().getTime() - config.timestamp) + 'ms'}; } await setLedState(indices[index], LED_ANIMATED); await singleAnimation(JSON.parse(JSON.stringify(config)), indices[index]); - await clearLedState(indices[index]); config.repetitions.done++; + } finally { + await clearLedState(indices[index]); } - return complex(config); - } catch (err) { - logger.error(err); } + return complex(config); } // power the blinkstick (or just a specific led) off async function powerOff(config) { - try { - await forceStop(); - config.timestamp = new Date().getTime(); - let indices = getIndices(config); - for (let index = 0; index < indices.length; index++) { - await singleAnimation(JSON.parse(JSON.stringify(config)), indices[index]); - logger.info('led \'' + indices[index] + '\' powered off'); - } - if (config.options.index === LEDS_ALL) { - const blinkstick = await findBlinkstick(); - blinkstick.stop(); - blinkstick.turnOff(); - logger.info('blinkstick powered off'); - } - return {status: 'ok', indices: indices, time: (new Date().getTime() - config.timestamp) + 'ms'}; - } catch (err) { - logger.error(err); - throw err; + await forceStop(); + config.timestamp = new Date().getTime(); + let indices = getIndices(config); + for (let index = 0; index < indices.length; index++) { + await singleAnimation(JSON.parse(JSON.stringify(config)), indices[index]); + logger.info('led \'' + indices[index] + '\' powered off'); } + if (config.options.index === LEDS_ALL) { + const blinkstick = await findBlinkstick(); + blinkstick.stop(); + blinkstick.turnOff(); + logger.info('blinkstick powered off'); + } + return {status: 'ok', indices: indices, time: (new Date().getTime() - config.timestamp) + 'ms'}; } // animations async function singleAnimation(config, index) { - try { - config.options.index = index; - const blinkstick = await findBlinkstick(); - return await new Promise((resolve, reject) => { - logger.debug('changing color of led \'' + config.options.index + '\' to \'' + config.color + '\' (mode: ' + config.mode + ')...'); - switch (config.mode) { - case MODE_MORPH: - blinkstick.morph(config.color, config.options, callback); - break; - case MODE_BLINK: - blinkstick.blink(config.color, config.options, callback); - break; - case MODE_PULSE: - blinkstick.pulse(config.color, config.options, callback); - break; - default: - blinkstick.setColor(config.color, config.options, callback); - break; - } + config.options.index = index; + const blinkstick = await findBlinkstick(); + return await new Promise((resolve, reject) => { + logger.debug('changing color of led \'' + config.options.index + '\' to \'' + config.color + '\' (mode: ' + config.mode + ')...'); + switch (config.mode) { + case MODE_MORPH: + blinkstick.morph(config.color, config.options, callback); + break; + case MODE_BLINK: + blinkstick.blink(config.color, config.options, callback); + break; + case MODE_PULSE: + blinkstick.pulse(config.color, config.options, callback); + break; + default: + blinkstick.setColor(config.color, config.options, callback); + break; + } - function callback(err) { - if (err) { - reject('changing color of led \'' + config.options.index + '\' to \'' + config.color + '\' encountered an error > ' + err); - } - logger.debug('changed color of led \'' + config.options.index + '\' to \'' + config.color + '\' (mode: ' + config.mode + ')'); - resolve(); + function callback(err) { + if (err) { + reject(new Error('changing color of led \'' + config.options.index + '\' to \'' + config.color + '\' encountered an error > ' + err)); } - }); - } catch (err) { - throw err; - } + logger.debug('changed color of led \'' + config.options.index + '\' to \'' + config.color + '\' (mode: ' + config.mode + ')'); + resolve(); + } + }); } async function forceStop() { @@ -207,10 +195,7 @@ function isInfiniteAnimation(config) { if (config.mode !== MODE_BLINK && config.mode !== MODE_PULSE) { return false; } - if (config.options.index === LEDS_ALL) { - return config.repetitions.max === 0; - } - return config.options.repeats === 0; + return config.repetitions.max === 0; } // exports