我有一个电子应用程序。它通过 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 数组中第二个值的文件。
那么如何才能将文件保存在正确的文件夹中呢?