diff options
author | Alex Yatskov <alex@foosoft.net> | 2016-08-08 09:09:03 -0700 |
---|---|---|
committer | Alex Yatskov <alex@foosoft.net> | 2016-08-08 09:09:03 -0700 |
commit | afef392491bded046299b7812f665dbe5193a25f (patch) | |
tree | a38ca44c08d1d81eca57bb2074ae0da6de4ba68d | |
parent | 6c838b7fb4c1fcfbf312dad4c163a30b3d5439f7 (diff) |
Simplify loading code with promises
-rw-r--r-- | ext/bg/js/translator.js | 71 |
1 files changed, 29 insertions, 42 deletions
diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 6134c725..29edd81a 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -19,14 +19,6 @@ class Translator { constructor() { - this.paths = { - rules: 'bg/data/rules.json', - tags: 'bg/data/tags.json', - edict: 'bg/data/edict.json', - enamdict: 'bg/data/enamdict.json', - kanjidic: 'bg/data/kanjidic.json' - }; - this.loaded = false; this.tagMeta = null; this.dictionary = new Dictionary(); @@ -39,38 +31,31 @@ class Translator { return; } - let files = ['rules', 'tags', 'edict', 'kanjidic']; - if (loadEnamDict) { - files = files.concat('enamdict'); - } - - const pendingLoads = []; - for (let key of files) { - pendingLoads.push(key); - Translator.loadData(this.paths[key], (response) => { - switch (key) { - case 'rules': - this.deinflector.setRules(JSON.parse(response)); - break; - case 'tags': - this.tagMeta = JSON.parse(response); - break; - case 'kanjidic': - this.dictionary.addKanjiDict(key, JSON.parse(response)); - break; - case 'edict': - case 'enamdict': - this.dictionary.addTermDict(key, JSON.parse(response)); - break; + Translator.loadData('bg/data/rules.json') + .then((response) => { + this.deinflector.setRules(JSON.parse(response)); + return Translator.loadData('bg/data/tags.json'); + }) + .then((response) => { + this.tagMeta = JSON.parse(response); + return Translator.loadData('bg/data/edict.json'); + }) + .then((response) => { + this.dictionary.addTermDict('edict', JSON.parse(response)); + return Translator.loadData('bg/data/kanjidic.json'); + }) + .then((response) => { + this.dictionary.addKanjiDict('kanjidic', JSON.parse(response)); + return loadEnamDict ? Translator.loadData('bg/data/enamdict.json') : Promise.resolve(null); + }) + .then((response) => { + if (response !== null) { + this.dictionary.addTermDict('enamdict', JSON.parse(response)); } - pendingLoads.splice(pendingLoads.indexOf(key), 1); - if (pendingLoads.length === 0) { - this.loaded = true; - callback(); - } + this.loaded = true; + callback(); }); - } } findTerm(text) { @@ -254,10 +239,12 @@ class Translator { return code >= 0x4e00 && code < 0x9fb0 || code >= 0x3400 && code < 0x4dc0; } - static loadData(url, callback) { - const xhr = new XMLHttpRequest(); - xhr.addEventListener('load', () => callback(xhr.responseText)); - xhr.open('GET', chrome.extension.getURL(url), true); - xhr.send(); + static loadData(url) { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.addEventListener('load', () => resolve(xhr.responseText)); + xhr.open('GET', chrome.extension.getURL(url), true); + xhr.send(); + }); } } |