|
electron中调用 async 类型的函数
在 Electron 中调用 `async` 类型的函数可以通过 `await` 关键字来实现,前提是你在一个 `async` 函数内部进行调用。以下是一个简单的示例,展示如何在 Electron 中调用 `async` 函数。
### 1. 定义一个 `async` 函数
首先,我们可以在 `main.js` 或 `preload.js` 中定义一个 `async` 函数。例如,在 `main.js` 中:
- // main.js
- const { app, BrowserWindow } = require('electron');
- async function fetchData() {
- // 模拟一个异步操作,例如网络请求
- return new Promise((resolve) => {
- setTimeout(() => {
- resolve("数据获取成功!");
- }, 2000); // 2秒后返回数据
- });
- }
- function createWindow() {
- const win = new BrowserWindow({
- width: 800,
- height: 600,
- webPreferences: {
- contextIsolation: true,
- preload: path.join(__dirname, 'preload.js') // 使用 preload.js 进行安全通信
- }
- });
- win.loadFile('index.html');
- }
- app.whenReady().then(async () => {
- const data = await fetchData(); // 调用 async 函数并等待其返回
- console.log(data); // 输出: 数据获取成功!
- createWindow();
- });
复制代码
### 2. 在渲染进程中调用 `async` 函数
如果你希望在渲染进程中调用 `async` 函数,可以通过 `ipcRenderer` 和 `ipcMain` 进行通信。以下是一个示例:
#### 在 `main.js` 中设置 IPC
- const { ipcMain } = require('electron');
- // 在 main.js 中监听 IPC 事件
- ipcMain.handle('fetch-data', async () => {
- const data = await fetchData(); // 调用 async 函数
- return data; // 返回数据给渲染进程
- });
- #### 在 `preload.js` 中暴露 API
- const { contextBridge, ipcRenderer } = require('electron');
- contextBridge.exposeInMainWorld('myAPI', {
- fetchData: () => ipcRenderer.invoke('fetch-data') // 通过 IPC 调用 async 函数
- });
复制代码
#### 在渲染进程中调用 API
- html
- <!-- index.html -->
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Electron App</title>
- </head>
- <body>
- <h1>Electron Async Example</h1>
- <button id="fetchButton">获取数据</button>
- <p id="result"></p>
- <script>
- document.getElementById('fetchButton').addEventListener('click', async () => {
- const data = await window.myAPI.fetchData(); // 调用 async API
- document.getElementById('result').innerText = data; // 显示获取的数据
- });
- </script>
- </body>
- </html>
复制代码
### 总结
1. 在 `main.js` 中定义一个 `async` 函数并使用 `await` 调用。
2. 通过 IPC 将 `async` 函数的调用暴露给渲染进程。
3. 在渲染进程中使用 `await` 调用该 API,并处理返回的数据。
通过这种方式,你可以在 Electron 中有效地调用 `async` 类型的函数。
|
|