Проблема с электронным ipcRenderer.send - PullRequest
1 голос
/ 05 мая 2019

У меня есть приложение Electron. Он отправляет через ipcRenderer.send в renderer.js событие загрузки прослушивателю ipcMain.on в index.js:

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});
});

Так что предполагается загрузить (благодаря пакету electronic-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

Кажется, это асинхронная проблема. Но я обернул запросы в функцию асинхронного ожидания, чтобы два события загрузки не перекрывали друг друга. И журналы консоли показывают это: сначала загружаются файлы первого значения в массиве data3.projects, затем загружаются файлы второго значения в массиве data3.projects.

Так как я могу сделать так, чтобы файлы сохранялись в нужной папке?

...