Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Electron-ipc sendSync-在回调中返回event.returnValue_Javascript_Electron - Fatal编程技术网

Javascript Electron-ipc sendSync-在回调中返回event.returnValue

Javascript Electron-ipc sendSync-在回调中返回event.returnValue,javascript,electron,Javascript,Electron,在我的渲染器进程(web页面)中,我同步发送一条消息,以便将页面打印为PDF 在window.webContents.printToPDF的回调中,我返回了event的returnValue。但是回调从未被调用。我使用VSCode来确认这一点 当异步尝试相同的进程时,它可以正常工作 代码: 渲染器: 主要流程: 更新: 操作系统:Windows 10、Windows 7 电子版:0.37.4 问题演示: 复制回购协议 运行应用程序并单击“打印到pdf” 我无法复制。当您的代码在渲染器进程中

在我的渲染器进程(web页面)中,我同步发送一条消息,以便将页面打印为PDF

window.webContents.printToPDF的回调中,我返回了event的returnValue。但是回调从未被调用。我使用VSCode来确认这一点

当异步尝试相同的进程时,它可以正常工作

代码:

渲染器:

主要流程:

更新:

  • 操作系统:Windows 10、Windows 7
  • 电子版:0.37.4
问题演示:

  • 复制回购协议
  • 运行应用程序并单击“打印到pdf”

  • 我无法复制。当您的代码在渲染器进程中运行时,您是否在开发工具中看到任何错误?@ShawnRakowski我能够在一个新的环境中复制相同的错误。我已使用repo url和更多详细信息更新了问题。请查看它。我现在看到了您的困境,我误解了未能调用的内容。我还没有找到任何东西来证实这一点,但我的直觉告诉我webcontent.printToPDF要求渲染器进程的线程可以执行此活动,但在等待sendSync()调用的响应时被卡住了。驱动它同步的要求是什么?@ShawnRakowski我希望同步执行的原因是在打印操作成功执行之前不允许用户交互。但在出现此问题后,我又恢复使用异步调用,并使用其他UI手段限制用户操作。但由于此问题(可能是预期行为)是存在的,我想对它有更好的了解。
    var params = {
        "path": undefined,
        "filename": vm.profile._id + " " + vm.profile.firstname
    }
    let result = ipcRenderer.sendSync('print-profile-pdf', params);
    
    ipcMain.on('print-profile-pdf', function(event, params) {
        printToPdf(params.path, params.filename, event);
    });
    function printToPdf(path, filename, event) {
        var options = {
            marginsType: 2,
            pageSize: "A4",
            printBackground: false,
            printSelectionOnly: false,
            landscape: false
        };
        let file = (path || app.getPath("desktop")) + "/" + (filename || "profile") + ".pdf";
        previewWindow.webContents.printToPDF(options, function(error, data) {
            if (error) {
                logger.error(error);
                event.returnValue = {
                    error: error,
                    success: false
                };
                throw error;
            }
            fs.writeFile(file, data, function(error) {
                if (error) {
                    logger.error(error);
                    event.returnValue = {
                        error: error,
                        success: false
                    };
                    throw error;
                }
                logger.info("PDF Saved Successfully in " + filename);
                event.returnValue = {
                    filename: filename + ".pdf",
                    success: true
                };
            });
        });
    };