downloader.onProgress = (progress) => { // 更新下载进度 downloadArray.set(downloader.data.timeid, { title: downloader.data.title, sUrl: downloader.data.sUrl, progress: downloader.data.progress, size: downloader.data.size, status:downloader.data.status, timeid:downloader.data.timeid }); mainWindow.webContents.send('donwloadStatus', true); mainWindow.webContents.send('consolelog', downloadArray); }; 这一段下载代码中,我用map 更新对应键值的 下载进度,但是为什么 A 下载器的进度会覆盖B下载器的进度
时间: 2024-02-05 17:03:02 浏览: 128
创建具有进度信息和取消功能的下载处理程序功能。-Node.js开发
在你提供的代码中,`downloadArray` 是一个 Map 对象,其中键是下载任务的 `timeid`,值是一个包含下载任务信息的对象,包括 `title`、`sUrl`、`progress`、`size`、`status` 和 `timeid` 等属性。
在这段代码中,下载进度的更新是通过 `downloadArray.set` 方法实现的。这个方法会根据指定的键(即 `downloader.data.timeid`)设置对应的值。因此,如果你有多个下载器同时进行下载,并且它们的 `timeid` 相同,那么它们会在同一个键上进行操作。这可能会导致进度信息被覆盖的问题。
为了解决这个问题,你可以为每个下载器分配一个唯一的 `timeid`。例如,可以使用时间戳作为 `timeid`,确保每个下载器都有一个唯一的标识符。这样,即使有多个下载器同时进行下载,它们也会在不同的键上进行操作,不会相互干扰。
另外,如果你想要实现多个下载器同时更新进度信息,可以考虑使用数组或对象来存储下载器的进度信息,而不是使用 Map 对象。这样可以避免键的重复问题,并且更方便地进行操作。
阅读全文