Electron – Ako odstrániť chybu  UnhandledPromise RejectionWarning: Error: Script failed to execute …

Electron

V tomto článku riešim odstránenie chyby „UnhandledPromise RejectionWarning: Error: Script failed to execute, this normally means an error was thrown. Check the renderer console for the error“.

Uvedené chybové hlásenie sa v mojom prípade vyskytlo pri použití metódy executeJavaScript(). Nižšie uvádzam príklad, ktorým je možné chybu reprodukovať.

    mainWindow.webContents.on('context-menu', (e, params) => {
        const selectedText = params.selectionText;
        try {
            mainWindow.webContents.executeJavaScript(`alert("${selectedText}")`);
        } catch (error) {
            console.error(error);
        }
    });

A tu je celé znenie chybového hlásenia.

(node:14896) UnhandledPromiseRejectionWarning: Error: Script failed to execute, this normally means an error was thrown. Check the renderer console for the error.
    at node:electron/js2c/renderer_init:93:395
    at EventEmitter.<anonymous> (node:electron/js2c/renderer_init:81:375)
    at EventEmitter.emit (node:events:390:28)
    at Object.onMessage (node:electron/js2c/renderer_init:69:833)
(Use `electron --trace-warnings ...` to show where the warning was created)
(node:14896) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)

Pre odstránenie tohto problému je potrebné celý vyššie uvedený zápis ešte zabaliť do eventu dom-ready.


     mainWindow.webContents.once('dom-ready', () => {      
        mainWindow.webContents.on('context-menu', (e, params) => {
            const selectedText = params.selectionText;
            try {
            mainWindow.webContents.executeJavaScript(`alert("${selectedText}")`);
            } catch (error) {
                console.error(error);
            }
        });
    });

Ďalší spôsob ako vyriešiť uvedený problém je nasledujúca úprava programového kódu. Odstráni sa wrapper dom-ready a try-catch blok a pridá sa catch blok do executeJavaScript().

mainWindow.webContents.executeJavaScript(script).catch(() => {});

Celý kód bude vyzerať teda nasledovne.

        mainWindow.webContents.on('context-menu', (e, params) => {
            const selectedText = params.selectionText;
            mainWindow.webContents.executeJavaScript(`alert("${selectedText}")`)
            .catch(() => {});
        });

Záver

V nasledujúcom článku sa bude opäť venovať Electronu a chybe, ktorú som nevedel niekoľko hodín vyriešiť až keď som si všimol, že som neodstránil jeden štandardný príkaz, ktorý žiaľ v tomto prípade fungoval stopercentne.

https://www.mldgroup.com

Vyštudovaný top manažér pôsobiaci najmä ako manažér, marketér, softvérový inžinier, konzultant, bloger, YouTuber a zatiaľ neúspešný hudobník a producent. V rámci praxe pôsobil v rôznych odvetviach na rôznych pozíciách v malých aj veľkých firmách, vrátane spoluprác a partnerstiev s významnými firmami či poradenskými spoločnosťami.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená.