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

关于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 3setTimeout(() => {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的状态为fulfilledsetTimeout(() => {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. 执行栈无其他函数 输出 1console.log(n);
}//立即执行函数
(async () => {// 1. 运行mawait m();// 3. 等待m运行完成// 6. m运行完成 输出2console.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中运行 微队列放入1const 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. 输出pendingconsole.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. 输出 promise1console.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未完成赋值为 undefinedconsole.log(a);// 5. 等待b一秒结束 then全部完成 依次输出 promise2 promise3 promise4await b; // 要等待b结束 但是程序不会卡住 就直接完成赋值了// 6. a现在未完成为pending.console.log(a);// 7. 输出after1console.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 startconsole.log("async1 start");await async2();// 5. 放入微队列console.log("async1 end");
}
async function async2() {// 4. 输出 async2console.log("async2");
}// 1. 输出 script start
console.log("script start");// 2. 放入宏队列 setTimeout
setTimeout(function () {console.log("setTimeout");
}, 0);async1();new Promise(function (resolve) {// 6. 输出promise1console.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.rhkb.cn/news/383840.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据清洗系统设计

设计一个高效的数据清洗系统旨在确保数据的质量,以便后续分析和决策过程可以基于准确、一致和完整的信息。以下是设计实时数据清洗系统时需要考虑的关键要素,结合之前提到的设计目标和原则: 1. 高效的数据处理 技术选型:采用并行…

vite构建vue3项目hmr生效问题踩坑记录

vite构建vue3项目hmr生效问题踩坑记录 hmr的好处 以下是以表格形式呈现的前端开发中HMR(热模块替换)带来的好处: 好处描述提升开发效率允许开发者在不刷新整个页面的情况下实时更新修改的代码,减少等待时间保持应用状态在模块替…

MES系统具体有哪些功能?如何更高效的利用MES系统

MES系统(Manufacturing Execution System,制造执行系统)是现代制造业中非常重要的一个信息化管理系统,它在生产过程中起到了关键的作用。MES系统的具体功能可以归纳如下: 万界星空科技MES系统的具体功能 生产计划管理…

HarmonyOS入门-状态管理

View(UI):UI渲染,指将build方法内的UI描述和Builder装饰的方法内的UI描述映射到界面。 State:状态,指驱动UI更新的数据。用户通过触发组件的事件方法,改变状态数据。状态数据的改变,引起UI的重新渲染。 装…

FPGA开发——奇数分频器的设计

一、概论 在我们进行FPGA分频器的学习当中,我们通常会学习怎样完成任意分频器的设计,其中就包括偶数分频最为常见。在实现的分频器的同时我们也会不定时的要求同时设置对应的占空比。今天我们就来看看怎样同时设置奇数分频器和其对应50%的占空比。 二、…

oracle读写时相关字符集详解

服务器端操作系统(Oracle linux)字符集 服务器端数据库字符集 客户端操作系统(Oracle linux)字符集 客户端工具sqlplus字符集 结论1:客户端工具sqlplus的会话,使用的字符集,是数据库字符集。…

【CPS出版】2024年智能计算与数据分析国际学术会议(ICDA 2024,9月6日-8)

为探讨数据科学和计算智能领域的关键问题,促进相关交流,2024年智能计算与数据分析国际学术会议(ICDA 2024)将于2024年9月6日-8日在中国青岛召开。 本届会议拟邀请数据分析和计算智能领域的顶级专家、学者和产业界优秀人才,围绕当前…

数据结构(Java):七大排序算法【详解】

目录 1、排序的概念 1.1 排序 1.2 排序的稳定性 1.3 内部排序&外部排序 1.4 各排序算法总结对比 2、 插入排序 2.1 🌸直接插入排序 2.2 🌸希尔排序 3、 选择排序 3.1 🌸直接选择排序 3.2 直接选择排序优化 3.3 🌸…

[红明谷CTF 2021]write_shell 1

目录 代码审计check()$_GET["action"] ?? "" 解题 代码审计 <?php error_reporting(0); highlight_file(__FILE__); function check($input){if(preg_match("/| |_|php|;|~|\\^|\\|eval|{|}/i",$input)){// if(preg_match("/| |_||p…

C语言------指针讲解(3)

一、字符指针 在指针中&#xff0c;我们知道有一类指针类型为字符指针char*; int main() {char ch w;char* pc &ch;*pc w;return 0; } 还有一种使用方式如下&#xff1a; 上述代码中&#xff0c;本质是把hello的首字符的地址放到了pstr中。即把一个常量字符串的首字符…

神经网络处理器模拟器的一点思考

一 神经网络处理器 通常基于FPGA的神经网络处理器进行部署某种网络&#xff0c;考虑的因素较多&#xff0c;具体包括网络模型的不同&#xff0c;涵盖不同的算子、激活函数、调度策略等等&#xff1b;具体硬件实现&#xff0c;涉及神经网络处理器并行度、硬件资源消耗&#xff0…

OpenGL入门第六步:材质

目录 结果显示 材质介绍 函数解析 具体代码 结果显示 材质介绍 当描述一个表面时,我们可以分别为三个光照分量定义一个材质颜色(Material Color):环境光照(Ambient Lighting)、漫反射光照(Diffuse Lighting)和镜面光照(Specular Lighting)。通过为每个分量指定一个颜色,…

C++STL详解(五)——list类的接口详解

一.list的介绍 list容器的底层是双向循环带头链表&#xff0c;在CPP中&#xff0c;我们对双向循环带头链表进行了一定程度的封装。 如果你不了解双向链表&#xff0c;那么可以浏览此片博文&#xff1a;双向链表 二.list的定义方式以及赋值 2.1list的构造方式 在这里我们要…

Haproxy 下载、编译部署、使用

文章目录 前言Haproxy 下载、编译部署、使用1. 下载2. 编译部署3. 使用3.1. 验证配置文件3.2. 启动 HAProxy 并指定配置文件路径3.3. 关闭HAProxy3.4. 重载HAProxy 3. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&am…

PCB工艺边设计准则

在PCB设计时&#xff0c;通常会在电路板的边缘预留一定的空间&#xff0c;这部分空间被称为工艺边。它有助于在生产过程中确保电路板的尺寸和形状的准确性。以使得组装时更加顺畅、便捷。而工艺边的加工&#xff0c;使得线路板上的元件可以精准地与设备对接&#xff0c;从而提高…

pythonGame-实现简单的贪食蛇游戏

通过python简单复现贪食蛇游戏。 使用到的库函数&#xff1a; import pygame import time import random 游戏源码&#xff1a; import pygame import time import randompygame.init()white (255, 255, 255) yellow (255, 255, 102) black (0, 0, 0) red (213, 50, 80…

鸿蒙(HarmonyOS)下拉选择控件

一、操作环境 操作系统: Windows 11 专业版、IDE:DevEco Studio 3.1.1 Release、SDK:HarmonyOS 3.1.0&#xff08;API 9&#xff09; 二、效果图 三、代码 SelectPVComponent.ets Component export default struct SelectPVComponent {Link selection: SelectOption[]priva…

【C++】选择结构案例-三只小猪称体重

案例问题 假设有三只小猪A、B、C&#xff0c;在输入三者体重后希望能输出他们各自的体重并测出谁最重 思路 先让A与B相比较&#xff0c;如果A重&#xff0c;则让A和C相比较&#xff0c;如果A重则输出A最重&#xff0c;否则输出C最重 在最开始的条件&#xff08;AB相比较&am…

Jetpack Compose 通过 OkHttp 发送 HTTP 请求的示例

下面是一个使用 Kotlin 和 Jetpack Compose 来演示通过 OkHttp 发送 HTTP 请求的示例。这个示例包括在 Jetpack Compose 中发送一个 GET 请求和一个 POST 请求&#xff0c;并显示结果。 添加okhttp依赖 首先&#xff0c;在你的 build.gradle.kts 文件中添加必要的依赖&#xf…

【Python系列】isin用法

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…