使用Promise将异步操作变为同步

let promise = new Promise(function(resolve, reject) {
    // 异步操作
    let success = true; // 这是一个假设的条件

    if (success) {
        resolve("操作成功");
    } else {
        reject("操作失败");
    }
});

Promise 可以处于以下三种状态之一:

  1. Pending(待定):操作尚未完成,也没有被拒绝或解决.
    Promise被创建但是resolvereject没有被调用时
  2. Fulfilled(已解决):操作成功完成,并返回了一个值
    resolve被调用
  3. 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被同步获取的

posted @ 2024-09-24 18:20  乘舟凉  阅读(296)  评论(0编辑  收藏  举报