Electron ipcRenderer.send

时间:2019-05-05 18:35:14

标签: javascript node.js electron ipcrenderer ipcmain

我有一个Electron应用程序。它通过renderer.js中的ipcRenderer.send发送下载事件到index.js中的ipcMain.on侦听器:

renderer.js:

for (var i=0; i < data3.projects.length; i++) {
    var project = data3.projects[i]; 

    for (var j=0; j < project.files.length; j++) {
        var file = project.files[j];
        async function downloadFunction(file) {
            await ipcRenderer.send("download", {
                url: file.url,
                location: "/Users/Marc/GreenPool/" + project.projectId + "/files/"
            })
            console.log("downloaded " + file.url);
        }
        await downloadFunction(file);
    }
}

index.js:

ipcMain.on("download", function (event, info) {
     console.log(info.location);
     download(mb.window.webContents, info.url, {directory:info.location});
});

因此应该下载(由于electron-dl npm软件包)project.files下的所有文件,并将其保存在info.location下。

在data3.projects数组下只有一个项目时,它可以工作,文件下载并存储在“ / Users / Marc / GreenPool /” + project.projectId +“ / files /”下。

但是,当data3.projects数组中有多个值时,它将仅保存data3.project之一的下载文件,而不保存其他文件的下载文件:

一个拥有文件:

enter image description here

没有:

enter image description here

我们可以在第一张图片上看到其中一个文件已重复。我认为这表明问题与以下事实有关:在第一个文件夹中写入了第一个文件之后,在开始写入第二个文件时,它仍然以某种方式仍然认为它在该文件夹中(我们可以通过compute2Numbers文件看到它( 1).js是重复的,因为它位于错误的文件夹中。

控制台的逻辑是逻辑:

index.js:

/Users/Marc/GreenPool/qjggnatri/files/
/Users/Marc/GreenPool/qjggnatri/files/
/Users/Marc/GreenPool/qjggnatri/files/
/Users/Marc/GreenPool/qjggnatri/files/
/Users/Marc/GreenPool/z9g7_a1qa/files/
/Users/Marc/GreenPool/z9g7_a1qa/files/
/Users/Marc/GreenPool/z9g7_a1qa/files/
/Users/Marc/GreenPool/z9g7_a1qa/files/

renderer.js:

enter image description here

enter image description here

似乎是一个异步问题。但是我将查询包装在异步await函数中,以防止两个下载事件相互重叠。控制台的日志显示:首先下载data3.projects数组中第一个值的文件,然后下载data3.projects数组中第二个值的文件。

那么如何使文件保存在正确的文件夹中?

0 个答案:

没有答案