Allow web frame methods to return async promises
authorSamuel Attard <samuel.r.attard@gmail.com>
Sun, 9 Oct 2016 00:51:46 +0000 (11:51 +1100)
committerKevin Sawicki <kevinsawicki@gmail.com>
Thu, 3 Nov 2016 16:33:47 +0000 (09:33 -0700)
lib/renderer/init.js

index 2356a81..de5bf35 100644 (file)
@@ -39,7 +39,13 @@ electron.ipcRenderer.on('ELECTRON_INTERNAL_RENDERER_SYNC_WEB_FRAME_METHOD', (eve
 
 electron.ipcRenderer.on('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', (event, requestId, method, args) => {
   const responseCallback = function (result) {
-    event.sender.send(`ELECTRON_INTERNAL_BROWSER_ASYNC_WEB_FRAME_RESPONSE_${requestId}`, result)
+    Promise.resolve(result)
+      .then((resolvedResult) => {
+        event.sender.send(`ELECTRON_INTERNAL_BROWSER_ASYNC_WEB_FRAME_RESPONSE_${requestId}`, resolvedResult)
+      })
+      .catch((resolvedError) => {
+        console.error(`An async web frame method (${method}) returned a promise that threw an error: `, resolvedError)
+      })
   }
   args.push(responseCallback)
   electron.webFrame[method].apply(electron.webFrame, args)