js执行顺序和promise.then()案例:

news2025/2/13 14:36:42

 这篇笔记摘录来源:

👉我是javascript,2分钟彻底弄懂我的执行机制?【JavaScript教程】_哔哩哔哩_bilibili

👉js执行顺序_前端小白,请多指教的博客-CSDN博客 

目录

面试题1: 

面试题2:

面试题3: 

面试题4:

一、单线程

 二、定时器

案例一:

案例二: 

三、关于异步任务:

案例:

执行机制图解(图是:js执行顺序_前端小白,请多指教的博客-CSDN博客):

面试题1: 

  (async function () {
        return new Promise((resoive, reject) => (
            setTimeout(() => {
                console.log('1');
            }, 0)
        ))
    });
    setTimeout(function () {
        console.log('2');
    }, 0);

    Promise.resolve(null).then(() => {
        console.log('3');
    }).then(() => {
        console.log('4');
        return Promise.reject();
    }).catch(() => {
        console.log('5');
    });

    console.log('6');

//63452

面试题2:

        const p1=new Promise((resolve,reject)=> { resolve(1) })
        const p2= new Promise((resolve,reject)=>{ resolve(2)})
        p1.then(res =>{
                console.log(res)

                p2
        }).then(res => { console.log(res)})

        //打印结果: 1 undefined

        const p1=new Promise((resolve,reject)=> { resolve(1) })
        const p2= new Promise((resolve,reject)=>{ resolve(2)})
        p1.then(res =>{
                console.log(res)

                return p2
        }).then(res => { console.log(res)})

        //打印结果:1 2

面试题3: 

        const promise = new Promise((resolve, reject) => {
            console.log(1);
            console.log(2);
        });
        promise.then(() => {
            console.log(3)
        });
        console.log(4);

        //打印结果:1 2 4

面试题4:

        const promise = new Promise((resolve, reject) => {
            resolve('success1');
            reject('error');
            resolve('success2')
        });
        promise.then((res) => {
            console.log('then:', res);
        }).catch((err) => {
            console.log('catch:', err);
        })

        //打印结果:then: success1

一、单线程

        js是单线程的,所有的同步任务都是按顺序依次执行的,前面的执行完了之后才会执行后面的任务。遇到计算量大的代码就会阻塞在这里。下面的代码就是打印输出10000次,当循环走完了之后 才会走后面的代码,输出的时间是175ms

        let starTime = new Date().getTime();
        for (let i = 0; i < 10000; i++) {
            console.log(i);
        };
        let endTime = new Date().getTime();
        console.log(endTime - starTime + 'ms');

 二、定时器

        js虽然是单线程,但是我们并不需要所有的代码都要依次执行,避免一些不必要的阻塞。所以就引入了事件循环队列。引入了事件循环队列之后,就将js中所有的代码分成了两大类 ,一类是同步代码,另一类是异步代码。同步代码的执行顺序总是早于异步代码。 可以理解成,js从上到下依次执行,遇到同步的就直接执行,遇到异步的,就将异步的代码放到最后再执行。

案例一:

        let starTime = new Date().getTime();
        setTimeout(() => {
            console.log('定时器的代码执行时间在:', 
            new Date().getTime() - starTime + 'ms')
        }, 3000)

        console.log('定时器之后的代码执行时间在', 
            new Date().getTime() - starTime + 'ms')

        //打印结果:定时器之后的代码执行时间在 0ms
        //打印结果:定时器的代码执行时间在: 3009ms

案例二: 

        console.log('同步1');
        setTimeout(() => {
            console.log('异步1')
        }, 0);
        console.log('同步2');
        setTimeout(() => {
            console.log('异步2')
        }, 0);
        console.log('同步3');
        //打印结果:
        //同步1
        //同步2
        //同步3
        //异步1
        //异步2

三、关于异步任务:

        异步任务有哪些?定时器,ajax异步请求,promise.then里的东西 等等

        任务队列又分成两个,一个是宏任务队列,一个是微任务队列。微任务队列里的任务要优先于宏任务队列里的任务;

        宏任务:定时器等;

        微任务:promise.then()里的代码,promise是同步的,ajax异步请求等;

案例:

        let promise = Promise.resolve(1);
        console.log('同步1');
        setTimeout(() => {
            console.log('宏任务:定时器')
        }, 0);
        promise.then(() => {
            console.log('微任务:promise里的console');
            setTimeout(() => {
                console.log('宏任务:promise里的定时器')
            }, 0);

        });
        console.log('同步2');

        //同步1
        //同步2
        //微任务:promise里的console
        //宏任务:定时器
        //宏任务:promise里的定时器

执行机制图解(图是:js执行顺序_前端小白,请多指教的博客-CSDN博客):

 

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

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

相关文章

java的转换流、压缩流、序列化流、打印流

一、转换流 转换流属于字符流&#xff0c;也是一种高级流&#xff0c;用来包装Reader和Writer。转化流是字符流和字节流之间的桥梁。转换输入流为InputStreamReader&#xff0c;把把字节流转化为字符流&#xff1b;转化输出流为OutputStreamWriter&#xff0c;把字符流转化为字…

解析 MySQL 锁机制:共享锁、排它锁、间隙锁、意向锁等,保障数据安全与高并发的秘密武器

前言并发事务问题锁分类锁定读共享锁排它锁 意向排它、意向共享锁自增锁记录锁间隙锁InnoDB 行锁模式及加锁方法死锁总结 前言 MySQL 锁机制比较显而易见&#xff0c;其最显著的特点是不同的存储引擎支持不同的锁机制 MySQL InnoDB 锁机制官方文档 比如在 MyISAM、Memory 存…

如何用Taro打造敏捷的移动App架构

什么是Taro&#xff1f; Taro&#xff08;或称为Taro框架&#xff09;是一种用于构建跨平台应用程序的开源JavaScript框架。它基于React和React Native&#xff0c;可以用于开发Web、iOS、Android和微信小程序等平台上的应用程序。 Taro的目标是实现一套代码多端运行的方案&a…

CRF条件随机场的原理、例子、公式推导和应用

转子&#xff1a;https://zhuanlan.zhihu.com/p/148813079 条件随机场&#xff08;Conditional Random Field&#xff0c;CRF&#xff09;是自然语言处理的基础模型&#xff0c;广泛应用于中文分词、命名实体识别、词性标注等标注场景。 条件随机场CRF与深度学习结合&#xf…

MATLAB文化算法

目录 文化算法 主要代码 Sphere AdjustCulture 结果 文化算法 基本概念&#xff1a;优化算法 | 详解文化算法&#xff08;附MATLAB代码&#xff09; - 知乎 不同于遗传算法只有种群进化空间&#xff0c;文化算法包含信念空间、种群空间两个进化空间&#xff0c;因此&#…

[学习笔记] [机器学习] 11. EM算法(极大似然估计、EM算法实例、极大似然估计取对数的原因)

视频链接数据集下载地址&#xff1a;无需下载 学习目标&#xff1a; 了解什么是 EM 算法知道极大似然估计知道 EM 算法实现流程 讲 EM 算法主要是为了后面的 HMM 做准备。 1. 初始 EM 算法 EM 算法&#xff08;Expectation-Maximization algorithm&#xff0c;期望最大化算法…

索引介绍和基本使用

介绍 索引就是用来加速SQL查询的 由于索引也是需要存储成索引文件的&#xff0c;因此对索引的使用也会涉及磁盘I/O操作。如果索引创建过多&#xff0c;使用不当&#xff0c;会造成SQL查询时&#xff0c;进行大量无用的磁盘I/O操作&#xff0c;降低了SQL的查询效率&#xff0c…

SaaS 系统完全开源介绍

&#x1f42f; 平台简介 芋道&#xff0c;以开发者为中心&#xff0c;打造中国第一流的快速开发平台&#xff0c;全部开源&#xff0c;个人与企业可 100% 免费使用。 架构图 管理后台的 Vue3 版本采用 vue-element-plus-admin &#xff0c;Vue2 版本采用 vue-element-admin 管…

MySQL数据库概念、管理以及SQL语句的基本命令操作

MySQL数据库概念、管理以及SQL语句的基本命令操作 一、数据库概念1、数据库的组成&#xff1a;数据、表、数据库2、数据库类型3、数据库的管理系统&#xff08;DBMS)4、数据库系统&#xff08;DBS&#xff09; 二、数据库系统发展史三、当今主流数据库四、关系型数据库五、MySQ…

HTML+CSS实训——Day15——部署项目到阿里云服务器

前言 因为阿里云有免费的3个月试用&#xff0c;我们可以把项目部署到上面。 选择这个服务 我们用CentOS&#xff0c;更简单&#xff0c;更轻量化。 打开他的VNC控制台 安装宝塔控制面板&#xff0c;输入 yum install -y wget && wget -O install.sh https://downlo…

提高你的小程序开发技能:五大重要步骤

对于任何开发人员来说&#xff0c;想要创建一个小程序并不是一件容易的事情。你需要为每个功能和应用程序编写代码&#xff0c;并且你需要不断地进行测试以确保它不会出错。 那么&#xff0c;我们该如何提高小程序的开发技能呢&#xff1f;通过下面这五个重要步骤&#xff0c;…

Win10麦克风没有声音怎么办?Win10麦克风没有声音恢复教程

Win10麦克风没有声音怎么办&#xff1f;Win10电脑中用户发现麦克风没有声音了&#xff0c;想知道怎么操作才能让声音恢复正常&#xff0c;这时候用户需要打开Win10电脑的设备管理器&#xff0c;点击更新相对应的驱动程序&#xff0c;这样就能轻松解决Win10麦克风没有声音的问题…

Python 课程设计2:学生信息管理系统

开发环境要求 本系统的软件开发及运行环境具体如下。 操作系统&#xff1a;Windows 10。Python版本&#xff1a;Python 3.7.0。开发工具&#xff1a;PyCharm VSCodePython内置模块&#xff1a;os、re。 功能&#xff1a; 1 录入学生信息功能 …

大模型微调方法调研

文章目录 Freeze方法PT方法Lora方法AdaloraPrompt TuningAdapter TuningPrefix tuning遗留问题 Freeze方法 对原始模型部分参数进行冻结操作&#xff0c;仅训练部分参数 PT方法 P-Tuning&#xff0c;仅对大模型的Embedding加入新的参数。 P-Tuning 提出将 Prompt 转换为可以…

Cgroup资源管理

docker资源限制 容器怎么实现资源的限制&#xff1f; 通过Cgroup资源限制 docker 通过Cgroup来控制容器使用的资源配额&#xff0c;包括CPU&#xff0c;内存&#xff0c;磁盘三大方面。 Cgroup是linux内核提供的一种可以限制&#xff0c;记录&#xff0c;隔离进程组所使用的…

IDEA默认代码样式的坑,逗号前面默认加上了空格

IDEA默认代码样式的坑&#xff0c;逗号前面默认加上了空格 个人习惯编写完代码&#xff0c;会使用CTRLALTL进行代码格式化&#xff0c;同时设置了提交的时候进行代码重排和格式化。突然有一天&#xff0c;格式化代码之后发现跟仓库的差异文件几百个&#xff0c;吓死。。。 当然…

代码开发中VO,BO,PO,DO,DTO是什么

代码开发中VO&#xff0c;BO&#xff0c;PO&#xff0c;DO&#xff0c;DTO是什么 MVC的简单定义&#xff1a; M层负责与数据库打交道&#xff1b; C层负责业务逻辑的编写&#xff1b; V层负责给用户展示&#xff08;针对于前后端不分离的项目&#xff0c;不分离项目那种编写…

一、微机保护装置的典型结构

微机型保护装置实质上是一种依靠单片微机智能地实现保护功能的工业控制装置。一般典型的微机保护结构是由五个部分构成的&#xff0c;即信号输入电路、单片微机系统、人机接口部分、输出通道回路及电源部分&#xff0c;如图1&#xff0d;l所示。 &#xff08;一&#xff09;信号…

多线程之基础

写在前面 本文看下多线程基础相关内容。 1&#xff1a;线程基础分析 1.1&#xff1a;摩尔定律失效 戈登.摩尔&#xff0c;英特尔公司的创始人之一&#xff0c;其发现了一个计算机的发展规律&#xff0c;即&#xff0c;处理器的性能每24个月就会翻一倍&#xff0c;这就是摩尔…

Vintage的变体与解读应用

Vintage在风险管理中有很多变体&#xff0c;通常分为以下四类&#xff1a; 1.根据选取切片数据时间不一样&#xff0c;可划分为Month end&#xff08;月末&#xff09;与Cycle end&#xff08;期末&#xff09;两种。 说明&#xff1a; **Month end&#xff1a;**选取切片数…