我有一个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之一的下载文件,而不保存其他文件的下载文件:
一个拥有文件:
没有:
我们可以在第一张图片上看到其中一个文件已重复。我认为这表明问题与以下事实有关:在第一个文件夹中写入了第一个文件之后,在开始写入第二个文件时,它仍然以某种方式仍然认为它在该文件夹中(我们可以通过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:
似乎是一个异步问题。但是我将查询包装在异步await函数中,以防止两个下载事件相互重叠。控制台的日志显示:首先下载data3.projects数组中第一个值的文件,然后下载data3.projects数组中第二个值的文件。
那么如何使文件保存在正确的文件夹中?