From 6d1158dd5937bf0d5997696068474cc9b9693482 Mon Sep 17 00:00:00 2001 From: kai zhu Date: Fri, 6 Sep 2019 10:40:30 -0500 Subject: [PATCH] web-worker should postMessage sql-errors (instead of throwing) chrome, edge, (firefox?) do not seem to honor worker.onerror -- and without some kind of error-feedback from sql.js web-workers, they are unsuitable for production use in many browser scenarios. this patch provides a bug-workaround by postMessaging back `errmsg` (rather than throwing it). here's a fully working standalone html-code for patched worker.sql-wasm-debug (with screenshot): ```html ``` --- dist/worker.sql-wasm-debug.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/dist/worker.sql-wasm-debug.js b/dist/worker.sql-wasm-debug.js index 56869e99..31ccf50d 100644 --- a/dist/worker.sql-wasm-debug.js +++ b/dist/worker.sql-wasm-debug.js @@ -698,6 +698,15 @@ Database = (function() { return null; } else { errmsg = sqlite3_errmsg(this.db); + // hack-sqjs - err-handling + // chrome, edge, (firefox?) don't support worker.onerror + // we postMessage back the errmsg instead + if (ENVIRONMENT_IS_WORKER) { + return postMessage({ + id: self.callbackId, + errmsg: errmsg + }); + } throw new Error(errmsg); } }; @@ -6928,6 +6937,10 @@ if (typeof importScripts === 'function') { return sqlModuleReady.then(function() { var buff, callback, data, done, err, result; data = event['data']; + // hack-sqjs - err-handling + // save callbackId globally so it can be accessed + // by Database.prototype.handleError + self.callbackId = data && data.id; switch (data != null ? data['action'] : void 0) { case 'open': buff = data['buffer'];