diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-01-30 12:33:29 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-30 12:33:29 -0500 |
commit | d0b8b605db93c51b5ce2501a482c57432b45bfa6 (patch) | |
tree | c42bf4f59d7945c8b9c42cd0677e3827d326a71a /ext/bg/js/anki.js | |
parent | af6e9a8153c24d0400592005b31d56fecff67068 (diff) |
Add note errors (#1329)
* Update _addAnkiNote to track errors
* Change comparison
* Update anki note adding to show errors
* Fix template
* Show errors when Anki card creation behaves unexpectedly
* Update some errors related to anki media injection
* Update addAnkiNote error handling
* Improve Anki errors
* Simplify error messages related to template rendering
Diffstat (limited to 'ext/bg/js/anki.js')
-rw-r--r-- | ext/bg/js/anki.js | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/ext/bg/js/anki.js b/ext/bg/js/anki.js index 68d9fc43..251e0e0c 100644 --- a/ext/bg/js/anki.js +++ b/ext/bg/js/anki.js @@ -162,22 +162,49 @@ class AnkiConnect { } async _invoke(action, params) { - const response = await fetch(this._server, { - method: 'POST', - mode: 'cors', - cache: 'default', - credentials: 'omit', - redirect: 'follow', - referrerPolicy: 'no-referrer', - body: JSON.stringify({action, params, version: this._localVersion}) - }); - const result = await response.json(); + let response; + try { + response = await fetch(this._server, { + method: 'POST', + mode: 'cors', + cache: 'default', + credentials: 'omit', + redirect: 'follow', + referrerPolicy: 'no-referrer', + body: JSON.stringify({action, params, version: this._localVersion}) + }); + } catch (e) { + const error = new Error('Anki connection failure'); + error.data = {action, params}; + throw error; + } + + if (!response.ok) { + const error = new Error(`Anki connection error: ${response.status}`); + error.data = {action, params, status: response.status}; + throw error; + } + + let responseText = null; + let result; + try { + responseText = await response.text(); + result = JSON.parse(responseText); + } catch (e) { + const error = new Error('Invalid Anki response'); + error.data = {action, params, status: response.status, responseText}; + throw error; + } + if (isObject(result)) { - const error = result.error; - if (typeof error !== 'undefined') { - throw new Error(`AnkiConnect error: ${error}`); + const apiError = result.error; + if (typeof apiError !== 'undefined') { + const error = new Error(`Anki error: ${apiError}`); + error.data = {action, params, status: response.status, apiError}; + throw error; } } + return result; } |