首页 > 其他分享 >使用Promise将异步操作变为同步

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

时间:2024-09-24 18:23:34浏览次数:6  
标签:session 异步 同步 const resolve proxyUrl Promise createWindow

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被同步获取的

标签:session,异步,同步,const,resolve,proxyUrl,Promise,createWindow
From: https://www.cnblogs.com/czlnb/p/18429758

相关文章

  • 分类预测 | Matlab实现FA-FS-SVM萤火虫算法同步优化特征选择结合支持向量机分类预测
    分类预测|Matlab实现FA-FS-SVM萤火虫算法同步优化特征选择结合支持向量机分类预测目录分类预测|Matlab实现FA-FS-SVM萤火虫算法同步优化特征选择结合支持向量机分类预测效果一览基本介绍程序设计参考资料效果一览基本介绍Matlab实现FA-FS-SVM萤火虫算法同步优化特征选择结合......
  • 网络时间同步服务器 gps时钟服务器 北斗时间同步服务器
    北斗GPS卫星授时服务器运行介绍北斗GPS卫星授时服务器的运行,主要是接收卫星信号,获取准确的时间信息。通过NTP协议,或者PTP协议的方式对外输出时间。例如西安同步电子科技有限公司的SYN2136系列服务器也可以同通过串口RMC语句的方式进行输出。在这个过程中,不可避免的会遇到冷启动,热启......
  • cnblogs的GitHub同步markdown文件的blog如何识别文章的唯一性(身份ID如何判定)
    本篇blog是写在GitHub的对应的仓库中的。cnblogs会给终身用户提供一个把GitHub仓库中的markdown文件同步到cnblogs上的一个服务,本文就是使用这个服务同步到个人blog地址的:https://cnblogs.com/xyz问题1:何时触发blogs的同步?当仓库中的markdown文件有更新时,cnblogs会自动同......
  • innobackupex定时全备,增量备份,压缩备份,自动同步到远程服务器脚本
    全量备份#!/bin/bash#设置变量mysql_backup_dir=/data/backup/mysql/mysql_username="yours"mysql_password="YOURS"#进入备份目录cd$mysql_backup_dir#生成当前时间戳timeStart=$(date'+%Y%m%d%H%M%S')logfile=full-$timeStart.log#执行全量备份/usr......
  • 运维系列【亲测有效】:centos7时间同步教程
    centos7时间同步教程centos7时间同步教程centos7查看时间centos7时间同步教程第一种方法,命令有点多1.通过命令查看时间不同步2.修改/etc/sysconfig/clock文件如下内容,保存3.重写`/etc/localtime`,执行如下,回车4.重启服务器使时区生效,需要再次登录服务器......
  • 万象更新 Html5 - es6 进阶: promise
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-es6进阶:promise示例如下:es6\src\advanced\promise.js/***Promise-用于异步编程(非多线程)*有3种状态:pending(进行中),fulfilled(已成功),rejected(已失败)*状态只能从pending变为fulfil......
  • 一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
    前言最近有不少小伙伴在问:.NET有什么值得推荐的网络通信框架?今天大姚给大家分享一个.NET开源、免费(MITLicense)、快速、低延迟的异步套接字服务器和客户端库:NetCoreServer。项目介绍NetCoreServer是一个.NET开源、免费(MITLicense)、快速、低延迟的异步套接字服务器和客户端库。它支......
  • Linux上chrony配置时间同步、主从时间同步设备配置
    一.计算机设备上的两种时间1.硬件时间计算机主板BIOS上依靠主板电池供电维持运行的时间,设备关机后依然在持续计时,计算机系统开机启动时会自动读取这个时间。2.系统时间软件系统上的时间,软件启动后会去读取硬件时间,之后会独立于硬件时间运行。二.配置同步时间服务器1.安装服务(1)安装c......
  • 用Asio实现同步echo服务器
    使用Asio实现同步echo服务器服务端sync_server.h#ifndefASYNC_SERVER_H#define ASYNC_SERVER_H#include<boost/asio/ip/tcp.hpp>#include<memory>#include<set>#include<thread>namespaceMS{ typedefstd::shared_ptr<boost::asio::ip::......
  • 线程同步:锁,条件变量,并发
    1)锁mutex2)条件变量头文件<condiction_variable>condition_variablecv;cv.wait(_lock,谓语)//使用谓语检查是否满足唤醒条件,防止假唤醒usingnamespacestd; mutex_mutex; condition_variablecv; //condition_variablecv2; intnum=1; threadth1([&](){ int......