簡體   English   中英

電子:X不是功能>>>(使用ipcrenderer / ipcmain回調)

[英]Electron: X is not a fuction >>> (Callback using ipcrenderer / ipcmain)

問題
我正在使用Promise(s)在加載庫時獲得回調。 每個promise通過ipcRenderer向ipcMain發送一條消息,並包含一個回調函數。

回調函數按預期調用,但它顯示錯誤:“Succes不是函數”(請查看以下代碼)。

窗戶:

function loadLibrary() {
    loadLibraryExtension('Database Manager', 'db').then(() => {
        return loadLibraryExtension('Path Extesnion', 'path');
    }).then(() => {
        return loadLibraryExtension('Excel Extension', 'excel4node');
    }).then(() => {
        return loadLibraryExtension('Auto updater', 'autoupdater');
    }).then(() => {
        onLibrariesLoaded();
    });
}

var loadLibraryExtension = (status, library) => {
    return new Promise(function (resolve, reject) {
        $('#current-load').html(status);
        ipcRenderer.send('load',
            library,
            resolve(),
            reject()
        );
    });
}

主要過程:

var db;
var path;
var excel;
var autoUpdater;

var load = {
    'db': () => { db = require('./dbmanager.js'); },
    'path': () => { path = require('path'); },
    'excel4node': () => { excel = require('excel4node'); },
    'autoupdater': () => { 
        autoUpdater = require('electron-updater');
        autoUpdater.autoDownload = false;
        autoUpdater.autoInstallOnAppQuit = false;
    }
}

ipcMain.on('load', function (event, library, succes, error) {
    try {
        load[library]();
    } catch (err) {
        Error(err);
        error(err);
        return;
    }
    succes();
});

我不希望出現任何錯誤,但我不斷得到

TypeError: succes is not a function
    at EventEmitter.<anonymous> (C:\git\library-system\src\main.js:40:3)
    at EventEmitter.emit (events.js:194:13)
    at WebContents.<anonymous> (C:\git\library-system\node_modules\electron\dist\resources\electron.asar\browser\api\web-contents.js:390:13)
    at WebContents.emit (events.js:194:13)
TypeError: succes is not a function
    at EventEmitter.<anonymous> (C:\git\library-system\src\main.js:40:3)
    at EventEmitter.emit (events.js:194:13)
    at WebContents.<anonymous> (C:\git\library-system\node_modules\electron\dist\resources\electron.asar\browser\api\web-contents.js:390:13)
    at WebContents.emit (events.js:194:13)
TypeError: succes is not a function
    at EventEmitter.<anonymous> (C:\git\library-system\src\main.js:40:3)
    at EventEmitter.emit (events.js:194:13)
    at WebContents.<anonymous> (C:\git\library-system\node_modules\electron\dist\resources\electron.asar\browser\api\web-contents.js:390:13)
    at WebContents.emit (events.js:194:13)
TypeError: succes is not a function
    at EventEmitter.<anonymous> (C:\git\library-system\src\main.js:40:3)
    at EventEmitter.emit (events.js:194:13)
    at WebContents.<anonymous> (C:\git\library-system\node_modules\electron\dist\resources\electron.asar\browser\api\web-contents.js:390:13)
    at WebContents.emit (events.js:194:13)

您正在渲染器中發送args

ipcRenderer.send('load', library, resolve(), reject());

並嘗試在主要過程中接收

function (event, library, succes, error) {...

首先,您發送了resolve() ,它不是函數的開頭。 Promise.resolve()返回Promise,而不是函數。

其次,Electron IPC的設計不允許發送不可序列化的值。 簡而言之,您無法發送函數並在其他過程中執行它。 您應該通過主進程中的webContents.sendevent.sender.send將信號發送回渲染器,然后讓渲染器進程解析進程中的承諾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM