From 06e66c0f246cbf6b0d4938a6b8d25f33dfa5beb4 Mon Sep 17 00:00:00 2001 From: Jeff Avallone Date: Sat, 14 Mar 2015 17:27:59 -0400 Subject: [PATCH] Creating helper methods for the setTimeout uses Abstracting out some of the setTimeout patterns that have popped up in the code to make the intention clearer. --- src/js/main.js | 8 ++------ src/js/parser/javascript.js | 16 +++++----------- src/js/parser/javascript/node.js | 16 +++++++--------- src/js/regexper.js | 12 +++--------- src/js/util.js | 21 ++++++++++++++++++++- 5 files changed, 37 insertions(+), 36 deletions(-) diff --git a/src/js/main.js b/src/js/main.js index 490255b..eb8abb1 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -33,7 +33,7 @@ window._gaq = (typeof _gaq !== 'undefined') ? _gaq : { regexper.bindListeners(); - setTimeout(() => { + util.tick().then(() => { window.dispatchEvent(util.customEvent('hashchange')); }); } @@ -44,10 +44,6 @@ window._gaq = (typeof _gaq !== 'undefined') ? _gaq : { .then(parser => { parser.render(); }) - .catch(error => { - setTimeout(() => { - throw error; - }); - }); + .catch(util.exposeError); }); }()); diff --git a/src/js/parser/javascript.js b/src/js/parser/javascript.js index ded80a5..8d16739 100644 --- a/src/js/parser/javascript.js +++ b/src/js/parser/javascript.js @@ -1,6 +1,7 @@ import Snap from 'snapsvg'; import _ from 'lodash'; +import util from '../util.js'; import javascript from './javascript/parser.js'; import ParserState from './javascript/parser_state.js'; @@ -46,18 +47,11 @@ export default class Parser { parse(expression) { this._addClass('loading'); - return new Promise((resolve, reject) => { - setTimeout(() => { - try { - javascript.Parser.SyntaxNode.state = this.state; + return util.tick().then(() => { + javascript.Parser.SyntaxNode.state = this.state; - this.parsed = javascript.parse(expression.replace(/\n/g, '\\n')); - resolve(this); - } - catch(e) { - reject(e); - } - }); + this.parsed = javascript.parse(expression.replace(/\n/g, '\\n')); + return this; }); } diff --git a/src/js/parser/javascript/node.js b/src/js/parser/javascript/node.js index 8343fce..1b947ed 100644 --- a/src/js/parser/javascript/node.js +++ b/src/js/parser/javascript/node.js @@ -57,15 +57,13 @@ export default class Node { return this.container.transform(matrix); } - deferredStep() { - return new Promise((resolve, reject) => { - setTimeout(() => { - if (this.state.cancelRender) { - reject('Render cancelled'); - } else { - resolve.apply(this, arguments); - } - }, 1); + deferredStep(value) { + return util.tick().then(() => { + if (this.state.cancelRender) { + throw 'Render cancelled'; + } + + return value; }); } diff --git a/src/js/regexper.js b/src/js/regexper.js index 6e9d94c..26e4ff3 100644 --- a/src/js/regexper.js +++ b/src/js/regexper.js @@ -97,11 +97,7 @@ export default class Regexper { this.state = ''; if (expression !== '') { - this.renderRegexp(expression).catch(message => { - setTimeout(() => { - throw message; - }); - }); + this.renderRegexp(expression).catch(util.exposeError); } } @@ -147,10 +143,8 @@ export default class Regexper { if (this.running) { this.running.cancel(); - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve(this.renderRegexp(expression)); - }, 10); + util.wait(10).then(() => { + return this.renderRegexp(expression); }); } diff --git a/src/js/util.js b/src/js/util.js index 66eb3dd..8661dd9 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -71,9 +71,28 @@ function spaceVertically(items, options) { } } +function wait(delay) { + return new Promise((resolve, reject) => { + setTimeout(resolve, delay); + }); +} + +function tick() { + return wait(0); +} + +function exposeError(error) { + tick().then(() => { + throw error; + }); +} + export default { customEvent, normalizeBBox, spaceHorizontally, - spaceVertically + spaceVertically, + wait, + tick, + exposeError };