使用Promise将异步操作变为同步
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,
})
// 读取浏览器的 session
const 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) => {
// 读取浏览器的 session
const 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
被同步获取的