electron-dl download()是异步的,如何实现,每次download()结束后再执行创建新的下载器
时间: 2024-02-18 08:06:18 浏览: 76
提供一个异步下载的类,支持批量下载。
您可以使用 `async/await` 或 `Promise` 来实现等待下载完成后再创建新的下载器的逻辑。
以下是使用 `async/await` 的示例代码:
```javascript
const { app, BrowserWindow } = require('electron');
const { download } = require('electron-dl');
const path = require('path');
let mainWindow;
app.on('ready', async () => {
mainWindow = new BrowserWindow();
for (let i = 0; i < dataArray.length; i++) {
const data = dataArray[i];
const downloadResult = await download(mainWindow, data.downloadUrl, {
directory: path.join(app.getPath('downloads'), 'my-data'),
filename: `data-${i}.csv`
});
console.log(`Downloaded ${downloadResult.getSavePath()}`);
}
});
```
在上面的代码中,我们使用 `async/await` 来等待下载完成后再继续执行下一轮循环。使用 `await` 关键词可以使 `download` 函数变成同步函数,等待下载完成后才会继续执行下一行代码。
以下是使用 `Promise` 的示例代码:
```javascript
const { app, BrowserWindow } = require('electron');
const { download } = require('electron-dl');
const path = require('path');
let mainWindow;
app.on('ready', () => {
mainWindow = new BrowserWindow();
let downloadPromise = Promise.resolve();
dataArray.forEach((data, index) => {
downloadPromise = downloadPromise.then(() => {
return download(mainWindow, data.downloadUrl, {
directory: path.join(app.getPath('downloads'), 'my-data'),
filename: `data-${index}.csv`
});
}).then(downloadResult => {
console.log(`Downloaded ${downloadResult.getSavePath()}`);
}).catch(error => {
console.error(`Download failed: ${error}`);
});
});
});
```
在上面的代码中,我们使用一个 `Promise` 对象 `downloadPromise` 来串行执行下载器的创建和下载。在循环中,每个下载器都会被添加到 `downloadPromise` 的链式调用中,等待上一个下载器下载完成后再进行下一个下载器的创建和下载。
阅读全文