diff options
author | Alex Yatskov <alex@foosoft.net> | 2016-05-06 21:34:06 -0700 |
---|---|---|
committer | Alex Yatskov <alex@foosoft.net> | 2016-05-06 21:34:06 -0700 |
commit | 7015b804699498999f68374a8c568665d4a24e3a (patch) | |
tree | 392f350bbc576a55d220866fb4a703a6d8fb101a | |
parent | f7db707dc249cabc14d72728ad1eb0176390593a (diff) |
Async pooling
-rw-r--r-- | ext/bg/js/yomichan.js | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js index 062e5e72..4a9fd35c 100644 --- a/ext/bg/js/yomichan.js +++ b/ext/bg/js/yomichan.js @@ -34,6 +34,7 @@ class Yomichan { }); this.translator = new Translator(); + this.asyncPools = {}; this.setState('disabled'); loadOptions((opts) => { @@ -50,7 +51,7 @@ class Yomichan { onMessage(request, sender, callback) { const {action, params} = request, handlers = { - canAddNotes: (definitions) => this.ankiInvoke('canAddNotes', definitions, callback), + canAddNotes: (definitions) => this.ankiInvoke('canAddNotes', definitions, 'notes', callback), findKanji: (text) => callback(this.translator.findKanji(text)), findTerm: (text) => callback(this.translator.findTerm(text)), getOptions: () => callback(this.options), @@ -101,10 +102,17 @@ class Yomichan { Yomichan.notifyChange('options', this.options); } - ankiInvoke(action, params, callback) { - if (this.options.enableAnkiConnect) { + ankiInvoke(action, params, pool, callback) { + if (pool !== null && this.asyncPools.hasOwnProperty(pool)) { + this.asyncPools[pool].abort(); + callback(null); + } else if (this.options.enableAnkiConnect) { const xhr = new XMLHttpRequest(); xhr.addEventListener('loadend', () => { + if (pool !== null) { + delete this.asyncPools[pool]; + } + const resp = xhr.responseText; callback(resp ? JSON.parse(resp) : null); }); |