关于promise的一些例题(运行步骤详细说明)

news2025/1/14 1:10:12

关于promise的一些例题(详细说明)

基本例题

// 直接运行 输出 1 2
const promise = new Promise((resolve, reject) => {
	console.log(1);
	resolve();
	console.log(2);
});

// then后面放入微队列
promise.then(() => {
	console.log(3);
});

// 输出4 之后没有代码了所以运行为队列中的 输出3
console.log(4);

// 1 2 4 3

基础例题

// 1. 输出1
const promise = new Promise((resolve, reject) => {
	console.log(1);
  // 2. 放入宏队列
  // 4. 运行 输出 2 3
	setTimeout(() => {
		console.log(2);
		resolve();
		console.log(3);
	});
});
// 5. 上一个promise完成了 这个放入为队列然后直接运行 输出4
promise.then(() => {
	console.log(4);
});
// 3. 输出5
console.log(5);

// 1 5 2 3 4

较为基础(考察promise的状态改变)

const promise1 = new Promise((resolve, reject) => {
	// 1. 发生计时 计时完成之后放入宏队列
  // 5. 计时一秒完成 promise1的状态为fulfilled
	setTimeout(() => {
		resolve();
	}, 1000);
});

// 2. promise1 未完成
// 6. promise1的状态为fulfilled 后续无对应状态的处理所以promise2的状态和前状态一致
const promise2 = promise1.catch(() => {
	return 2;
});

// 3. 因为promise1未resolve 所以为pending, 故promise2 和上一个promise 一致,为pending. 输出 pending pending
console.log("promise1", promise1);
console.log("promise2", promise2);

// 4. 计时2秒后加入宏队列
// 7. 计时2秒完成 输出 fulfilled fulfilled
setTimeout(() => {
	console.log("promise1", promise1);
	console.log("promise2", promise2);
}, 2000);

// pending pending fulfilled fulfilled

async 和 await的使用

async function m() {
	const n = await 1;
	console.log(n);
}

// 1. await 左边等于放入then中 await1 立即完成log(n)放入微队列
// 3. 执行栈没有代码了 运行微队列输出1
m();
// 2. 输出2
console.log(2);

// 2 1

较为简单

// 函数定义不看
async function m() {
  // 2. log 1 直接放入微队列
	const n = await 1;
  // 5. 执行栈无其他函数 输出 1
	console.log(n);
}

//立即执行函数
(async () => {
  // 1. 运行m
	await m();
  // 3. 等待m运行完成
  // 6. m运行完成 输出2
	console.log(2);
})();

// 4. 输出 3
console.log(3);

// 3 1 2

不是很难就是有点绕(注意await后面的会直接运行前面的等于放在then里面)

// 函数定义不看
async function m1() {
	return 1;
}

async function m2() {
	// 3. 运行m1 await左边等于在then中运行 微队列放入1
	// 8. 运行m1 await左边等于在then中运行 微队列放入1
	const n = await m1();
	console.log(n);
	return 2;
}

async function m3() {
	// 2. m2 因为标记了async所以必定返回promise,但是目前m2并未执行完毕所以 n为pending
	// 7. 与上面理由相同
	const n = m2();
	// 4. 输出pending
	// 9. 输出pending
	console.log(n);
	// 相当于 Promise.resolve(3)
	return 3;
}

// 1. 运行m3
m3().then((n) => {
	console.log(n); // 5. 微队列放入3
});

// 6. 运行m3
m3();

// 10. 输出 4
console.log(4);
// 11. 依次运行微队列 1 3 1

// pending pending 4 1 3 1

在这里插入图片描述

这个没遇到过是真的不知道

// then中只能接受函数 如果不是函数就不用管
Promise.resolve(1).then(2).then(Promise.resolve(3)).then(console.log);
// 输出 1

这个较为直观没有很绕(知道值是怎么赋值的就行)

var a;
var b = new Promise((resolve, reject) => {
	// 1. 输出 promise1
	console.log("promise1");
  // 2. 计时一秒后进入宏队列
	setTimeout(() => {
		resolve();
	}, 1000);
})
	.then(() => {
		console.log("promise2");
	})
	.then(() => {
		console.log("promise3");
	})
	.then(() => {
		console.log("promise4");
	});

a = new Promise(async (resolve, reject) => {
  // 3. a未完成赋值为 undefined
	console.log(a);
  // 5. 等待b一秒结束 then全部完成 依次输出 promise2 promise3 promise4
	await b; // 要等待b结束 但是程序不会卡住 就直接完成赋值了
  // 6. a现在未完成为pending.
	console.log(a);
  // 7. 输出after1
	console.log("after1");
  // 8. 等待自己但是永远不会完成后面的不运行
	await a;
	resolve(true);
	console.log("after2");
});

// 4. 输出 end
console.log("end");

// promise1 undefined end promise2 promise3 promise4 pending after1

哪年的面试题啊忘记了

async function async1() {
	// 3. 输出 async1 start
	console.log("async1 start");
	await async2();
  // 5. 放入微队列
	console.log("async1 end");
}
async function async2() {
  // 4. 输出 async2
	console.log("async2");
}

// 1. 输出 script start
console.log("script start");

// 2. 放入宏队列 setTimeout
setTimeout(function () {
	console.log("setTimeout");
}, 0);

async1();

new Promise(function (resolve) {
  // 6. 输出promise1
	console.log("promise1");
	resolve();
}).then(function () {
  // 7. 放入微队列
	console.log("promise2");
});
// 8. 输出 script end
console.log("script end");

// 9. 结算微队列和宏队列得
//  script start async1 start async2 promise1 script end async1 end promise2 setTimeout

输出那栏表示的是没有算入宏/微队列的输出完整答案再加上队列中的就行
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1950199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

秋招突击——7/23——百度提前批面试准备和正式面试

文章目录 引言一面准备面试预演一1、讲一下hashcode()和equals()关系2、equals()和有什么区别3、讲一下重载和重写的区别4、讲一下深拷贝、浅拷贝的区别5、讲一下Java异常的基类,运行时异常举几个例子,什么情况下会出现?6、讲一下Java中线程的…

【管控业财一体化】

1. 引言 大型集团在现代企业管理中扮演着举足轻重的角色,其管控业财一体化解决方案是实现企业高效运营的关键。随着数字化转型的加速,业财一体化不再局限于财务与业务流程的简单融合,而是向着更深层次的数据驱动、智能化决策和价值创造方向发…

光猫设置桥接 路由器pppoe拨号 设置正常访问光猫 (openwrt)

网络信息展示 光猫桥接很简单吧,就不说了。先来列出修改前的网络接口和网络信息。 光猫192.168.1.1,openwrt 10.0.0.0/8 初始配置 需要记录的信息:WAN的网络设备(eth1),光猫的IP(192.168.1.1&am…

RV1126 Linux 系统,接外设,时好时坏(一)应该从哪些方面排查问题

在 Linux 系统中接外设时,遇到“时好时坏”的问题,可能是由多种因素引起的。以下是一些排查问题的建议。 1. 硬件方面的排查 1.1 连接检查 物理连接: 确保外设与主板之间的连接良好,检查插头、插座及线缆是否牢固。引脚配置: 确认设备树中引脚的配置是否正确,尤其是引脚…

linux modetest常用命令

1 通过help有哪些参数 130|:/ # modetest -h usage: modetest [-acDdefMPpsCvrw]Query options:-c list connectors-e list encoders-f list framebuffers-p list CRTCs and planes (pipes)Test options:-P <plane_id><crtc_id>:<w>x&l…

Web开发:ASP.NET CORE中前端使用Ajax定时获取后端数据

一、低难度&#xff08;刷新a标签&#xff09; 1、需求 给a标签每15s刷新一次&#xff0c;显示最新的时间&#xff08;时间必须由后端获取&#xff09; 应该如何操作呢 2、代码 后端 using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Mi…

go语言开发Prometheus Exporter(DM数据库)

一、介绍 源码步骤基于dameng_exporter源码讲解&#xff0c;看完本篇文章可以直接进行二次开发。 dameng exporter的开源地址&#xff1a;https://github.com/gy297879328/dameng_exporter&#xff08;可直接对接prometheusgrafana 提供表盘&#xff09; 开发一个exporter 其…

智谱OpenDay“大有可玩”:30秒将任意文字生成视频

Sora毫无疑问带来AI大模型的全新玩法&#xff0c;大模型可基于任意文字生成视频&#xff0c;这也是这个“大家庭”若干努力&#xff08;包括Runway的Gen系列、微软的Nuwa、Meta的Emu、谷歌的Phenaki/VideoPoet、CogVideo等&#xff09;的一个全新高度。 7月26日&#xff0c;这…

数据结构(5.3_4)——线索二叉树的概念

普通二叉树找某结点前驱和后继的方法 中序线索二叉树 n个结点的二叉树&#xff0c;有n1个空链域!可用来记录前驱&#xff0c;后继的信息 中序线索二叉树的存储结构 //线索二叉树结点 typedef struct ThreadNode {ElemType data;struct BiTNode* lchild, * rchild;int ltag,…

Git、Gitlab以及分支管理

分布式版本控制系统 一、Git概述 Git是一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更。它由Linus torvalds创建的&#xff0c;最初被设计用于Linux内核的开发。Git 允许开发人员跟踪和管理代码的版本&#xff0c;并且可以在不同的开发人员之间进行协作。 Githu…

【学习笔记】解决Serial Communication Library编译问题

【学习笔记】解决编译 Serial Communication Library 时的 Catkin 依赖问题 Serial Communication Library 是一个用 C 编写的用于连接类似 rs-232 串口的跨平台库。它提供了一个现代的 C 接口&#xff0c;它的工作流程设计在外观和感觉上与 PySerial 相似&#xff0c;但串口速…

操盘手分享:葆奕康平台获上市公司投资3300万,大健康新零售模式!

文丨微三云胡佳东&#xff0c;点击上方“关注”&#xff0c;为你分享市场商业模式电商干货。 - 2024年的项目越来越难做&#xff0c;不是随便开个盘在线上零撸、嘘投、空转&#xff08;无实业&#xff09;&#xff0c;这种没实力、没资本、没实业、没生态的项目90%的都活不过…

linux如何卸载python3.5

卸载&#xff1a; 1、卸载python3.5 sudo apt-get remove python3.5 2、卸载python3.5及其依赖 sudo apt-get remove --auto-remove python3.5 3、清除python3.5 sudo apt-get purge python3.5 或者 sudo apt-get purge --auto-remove python3.5

LeetCode 2844.生成特殊数字的最少操作(哈希表 + 贪心)

给你一个下标从 0 开始的字符串 num &#xff0c;表示一个非负整数。 在一次操作中&#xff0c;您可以选择 num 的任意一位数字并将其删除。请注意&#xff0c;如果你删除 num 中的所有数字&#xff0c;则 num 变为 0。 返回最少需要多少次操作可以使 num 变成特殊数字。 如…

第二证券:台风的后遗症竟然是台股!

今日早盘&#xff0c;中国台湾的台湾加权指数开盘大跌逾4%&#xff0c;台积电跌超6%。此前&#xff0c;因为飓风的原因&#xff0c;台湾股市暂停生意两天。暂停生意前&#xff0c;台湾加权指数收报22871点&#xff0c;上升614点&#xff0c;涨幅高达2.76%。 剖析人士认为&…

opencv - py_calib3d - py_epipolar_geometry 对极几何

文章目录 Epipolar Geometry 对极几何目标基本概念代码练​​习 Epipolar Geometry 对极几何 目标 在本节中&#xff0c; 我们将学习多视图几何的基础知识我们将了解什么是对极点、对极线、对极约束等。 基本概念 当我们使用针孔相机拍摄图像时&#xff0c;我们会丢失一个…

解锁人工智能学习中的数学密钥

一、启航&#xff1a;奠定数学基础 1. 线性代数&#xff1a;AI的入门语言 学习目标&#xff1a;掌握向量、矩阵的基本概念及运算&#xff0c;理解线性空间、线性变换及特征值、特征向量的意义。学习建议&#xff1a;从基础教材入手&#xff0c;如《线性代数及其应用》&#x…

Godot入门 03世界构建1.0版

在game场景&#xff0c;删除StaticBody2D节点&#xff0c;添加TileMap节点 添加TileSet图块集 添加TileSet源 拖动图片到图块&#xff0c;自动创建图块 使用橡皮擦擦除。取消橡皮擦后按住Shift创建大型图块。 进入选择模式&#xff0c;TileMap选择绘制&#xff0c;选中图块后在…

PostgreSQL 数据库 安装

1、官网下载 起源与发展&#xff1a;PostgreSQL最初起源于加州大学伯克利分校的Postgres项目&#xff0c;该项目始于1986年&#xff0c;并一直演进到1994年。在1995年&#xff0c;Postgres项目增加了SQL翻译程序&#xff0c;并更名为Postgres95。随后&#xff0c;在1996年&…

dsp c6657 SYS/BIOS学习笔记

1 SYS/BIOS简介 SYS/BIOS是一种用于TI的DSP平台的嵌入式操作系统&#xff08;RTOS&#xff09;。 2 任务 2.1 任务调度 SYS/BIOS任务线程有0-31个优先级&#xff08;默认0-15&#xff0c;优先级0被空闲线程使用&#xff0c;任务最低优先级为1&#xff0c;最高优先级为15&am…