let promise = new Promise(function(resolve, reject) {// 异步操作let success = true; // 这是一个假设的条件if (success) {resolve("操作成功");} else {reject("操作失败");}
});
Promise
可以处于以下三种状态之一:
- Pending(待定):操作尚未完成,也没有被拒绝或解决.
在Promise
被创建但是resolve
或reject
没有被调用时 - Fulfilled(已解决):操作成功完成,并返回了一个值
resolve
被调用 - Rejected(已拒绝):操作失败,并返回了一个原因(通常是错误)。
reject
被调用
使用 await
关键字可以等待resolve
或者reject
被执行,可以利用这一点将异步操作变成同步
const { app, BrowserWindow, ipcMain, BrowserView } = require('electron');const { resolve } = require('path');function createWindow(){const mainWindow = new BrowserWindow({show: false,width: 1024,height: 768,})// 读取浏览器的 sessionconst session = mainWindow.webContents.session// 下面的代码会尝试解析代理配置,如果用户配置了系统代理,// 并且代理规则没有排除 www.google.com,那我们就可以读取到代理信息session.resolveProxy('https://www.google.com').then((proxyUrl) => {// DIRECT 表示没有配置代理if (proxyUrl !== 'DIRECT') {// proxyUrl 是这种格式: 'PROXY 127.0.0.1:6152'const hostAndPort = proxyUrl.split(' ')[1]const [proxyHost, proxyPort] = hostAndPort.split(':')console.log(proxyUrl)resolve();}})console.log("createWindow finished")
}app.whenReady().then(() => {createWindow();});
执行结果为
createWindow finished
PROXY 127.0.0.1:7890
看到PROXY 127.0.0.1:7890
被异步获取了
使用await
+ Promise
后
const { app, BrowserWindow, ipcMain, BrowserView } = require('electron');const { resolve } = require('path');async function createWindow(){const mainWindow = new BrowserWindow({show: false,width: 1024,height: 768,})await new Promise((resolve,reject) => {// 读取浏览器的 sessionconst session = mainWindow.webContents.session// 下面的代码会尝试解析代理配置,如果用户配置了系统代理,// 并且代理规则没有排除 www.google.com,那我们就可以读取到代理信息session.resolveProxy('https://www.google.com').then((proxyUrl) => {// DIRECT 表示没有配置代理if (proxyUrl !== 'DIRECT') {// proxyUrl 是这种格式: 'PROXY 127.0.0.1:6152'const hostAndPort = proxyUrl.split(' ')[1]const [proxyHost, proxyPort] = hostAndPort.split(':')console.log(proxyUrl)resolve();}})})console.log("createWindow finished")
}app.whenReady().then(() => {createWindow();});
执行结果:
PROXY 127.0.0.1:7890
createWindow finished
看到PROXY 127.0.0.1:7890
被同步获取的