1

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

渲染器.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 之一的下载文件,而不保存其他文件:

一个有文件:

在此处输入图像描述

一个没有:

在此处输入图像描述

我们可以在第一张图片上看到其中一个文件是重复的。我认为这表明问题与这样一个事实有关,即在第一个文件夹中写入第一个文件后,它在开始写入第二个文件时仍然认为它在这个文件中(我们可以通过文件 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/

渲染器.js:

在此处输入图像描述

在此处输入图像描述

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

那么如何才能将文件保存在正确的文件夹中呢?

4

0 回答 0