setTimeout、Promise、async和await执行顺序

await Promise内部执行setTimeout定时器,提前clearTimeout,导致卡死的情况分析及解决方案 在我们日常开发中,我们常常需要在某个地方暂停某个动作一段时间。这个时候,我们的通常做法是使用setTimeout,配合promise实现。也就是如下代码。}, ms);});// 等待Promise的resolve操作完成但我们偶尔需要提前终止这个定时器。这时候我们会需要使用JavaScript 自带的clearTimeout方法,这个方法要求我们传入 timeoutId,也就是这个定时器的Id}, ms) 阅读详情

宏任务macrotasks:setTimeout、setInterval、I/O、UI渲染

微任务microtasks:Promise、 process.nextTick、Object.observe、 MutationObserver

微任务优先级高于宏任务。每一个事件循环都有一个微任务队列、一个或者多个宏任务队列。

console.log('同步代码1');
setTimeout( 
    ()=>{
        console.log('异步代码5,宏任务,优先级较低');
    }
);
new Promise((resolve,reject)=>{
    console.log('同步代码2')
    resolve('Promise的回调')
}).then(data=>{
    console.log('异步代码4,微任务,优先级较高',data)
})
console.log('同步代码3');
console.log('script start');

async function async1() {
    await async2();
    console.log('async1 end');  // 这里的代码相当于promise.resolve().then(里面)
}
async function async2() {
    console.log('async2 end');
}
async1();

setTimeout(function () {
    console.log('setTimeout')
}, 0)

new Promise(resolve => {
    console.log('Promise');
    resolve()
})
    .then(function () {
        console.log('promise1')
    })
    .then(function () {
        console.log('promise2')
    })

console.log('script end') 
function delay(duration) {
    var start = Date.now()
    while(Date.now() - start < duration){}
}
setTimeout(function(){
    console.log(1)
}, 0)
delay(1000)
console.log(2)
// 等待一秒之后输出2 1


setTimeout(function(){
    console.log(1)
}, 0)
Promise.resolve().then(function(){
    console.log(2)
})
console.log(3)
// 3 2 1

function a(){
    console.log(1)
    Promise.resolve().then(function(){
        console.log(2)
    })
}
setTimeout(function(){
    console.log(3)
    Promise.resolve().then(a)
}, 0)
Promise.resolve().then(function(){
    console.log(4)
})
console.log(5)
// 5 4 3 1 2

1.如果执行函数栈的时候出现while(true) 会阻塞渲染。
2.如果微任务请求数据一直执行,不交回执行权,递归调用微任务,会阻塞渲染。
3.如果不断的执行下一个task,递归调用宏任务,不会阻塞渲染。

<body>
    <input type="text">
    <button id="syn1">同步阻塞</button>
    <button id="syn2">微任务阻塞</button>
    <button id="syn3">宏任务阻塞</button>
    <script>
        // 同步阻塞
        document.querySelector('#syn1').onclick=function(){
            while(true){}
        }
        // 微任务阻塞
        function micro() {
            Promise.resolve('ok').then((data)=>{
                micro();
            })
        }
        document.querySelector('#syn2').onclick=function(){
            micro();
        }
        // 宏任务不阻塞
        function macro() {
          setTimeout(()=>{
              console.log('执行宏任务了!!')
            macro();
          })
        }
        document.querySelector('#syn3').onclick=function(){
            macro();
        }
    </script>
</body>

setTimeout async/await promise执行顺序 详解 第一次面试,就挂在了 异步执行顺序上,setTimeout async/await promise的执行顺序,搞不清楚,看了许多博客,但在关键点不是很详细。 可以先看一下大佬的解释: 网页链接 async function async1() { console.log('async1 start') await async2() console.log('async1 end') } async function async2() { console.log('async2') } 阅读详情

相关推荐

async/await、promise和setTimeout的执行顺序(2026最新)

从一道题目出发 今天看到一道面试题,是关于async/await、promise和setTimeout的执行顺序,题目如下:

前端必备小窝 1069

setTimeout 可以 await吗

在 JavaScript 中,setTimeout函数本身不返回一个 Promise,因此它不能直接与await关键字一起使用,因为await是用于等待一个 Promise 解决。然而,你可以通过包装setTimeout在一个 Promise 中来使其可await,从而在async函数中按预期工作。

m0_57236802的博客 1539

探针卡技术演进:从金线微针到MEMS探针的Wafer Sort革命

本文探讨了探针卡技术从传统金线微针到MEMS探针的演进,及其对晶圆测试(Wafer Sort)的革命性影响。随着芯片焊垫间距进入45微米以下,MEMS技术凭借其超高精度、超长寿命和卓越的信号完整性,成为应对高密度、高速及3D IC测试挑战的关键,显著提升了测试效率与稳定性。

lstm7chronicler的博客 365

setTimeout、Promise、Async/Await 的区别

1.SetTImeout 注意setTimeout是异步执行函数 , 当js主线程运行到此函数时,不会等待settimeout中的回调函数 ,会直接进行settimeout下面的语句(尽管setTimeout的延迟时间为0时) 当执行完当前事件循环的时候,settimeout中的回调会在下次(或者某一个)事件循环中被执行 例子1: console.log('setTimeout...

宫晨的专栏 6556

近4000张真实城市场景行人数据集:YOLO训练实战指南

行人检测是计算机视觉在智能驾驶与机器人感知中的基础任务,其核心挑战在于模型对真实道路场景的鲁棒性——尤其在小目标、遮挡、光照变化及中国特有交通参与者(如外卖骑手、接娃家长)下的泛化能力。本文围绕轻量化、高覆盖、强落地性的近4000张实采图像,系统阐释如何构建面向YOLO系列模型的高质量训练数据集:从四维场景采样策略(光照-遮挡-尺度-姿态)出发,解析标注规范对检测精度的关键影响,并说明数据增强需服务于真实干扰源(雨痕、动态模糊、对比度衰减),而非盲目堆叠。该数据集专为已掌握YOLO训练流程的算法工程师、嵌入

weixin_32495691的博客 298

Code Ocean 上传代码 手把手教程

对于一些学术期刊,录用前会让把代码上传到Code Ocean上,但上传过程可能会遇到一些问题,小编分享一下自己的上传经验。他们会进行验证,验证通过,将自动发布。点此运行即可,但是运行比较慢。

u014071947的博客 1万+

async/await、promise和setTimeout执行顺序

async/await、promise和setTimeout执行顺序

效率开发者手札 3467

实例讲解MOS管电源开关电路的软启动

1、控制电源开关的输入信号 Control 为低电平或高阻时,三极管Q2的基极被拉低到地,为低电平,Q2不导通,进而MOS管Q1的Vgs = 0,MOS管Q1不导通,+5V_OUT 无输出。此时将 Control 设为低电平,三极管Q2关闭,电容C1与G极相连端通过电阻R2放电,电压逐渐上升到5V,起到软关闭的效果。不过从作者的描述来看,只是电路参数有区别,能通过的电流、能承受的耐压等不一样,但是软启动的原理是一样的。从公式可以看出,当电容容量越大,电压越高,时间越短,电流就会越大,从而形成浪涌电流。

U_YAO的博客 2万+

setTimeout模拟请求,使用async和await改写的一些注意地方

通过定时器模拟异步数据请求并引入promise处理的方法过程。 一、依次输出1,2,3 setTimeout(() => { console.log(1); setTimeout(() => { console.log(2); setTimeout(() => { console.log(3); }, 1000)

weixin_41033048的博客 3863

【人工智能】人工智能基础概念、流派、发展史

人工智能初衷就是让计算机能够像人类一样具有自我思考、自我学习、自我决策的能力。依据百度百科上对人工智能定义:人工智能是研究、开发用于模拟、扩展和延伸人的智能的理论、方法、技术及应用系统的一门新的技术学科。人工智能是研究使计算机来模拟人的某些思维过程和智能行为的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。

WEL测试 1891

避坑指南:Win10安装Docker Desktop时Hyper-V报错的7种解决方案(2024最新版)

本文提供了2024年最新、最全面的Windows 10系统下Docker Desktop安装时Hyper-V报错的解决方案指南。文章深入剖析了Hyper-V与Docker的共生关系,并系统性地给出了从BIOS/UEFI设置、Windows功能启用、bcdedit命令修复到处理多虚拟化环境共存等7种核心解决方案,帮助开发者彻底解决安装困局,顺利部署容器化开发环境。

weixin_28840143的博客 531

关于async/await、promise和setTimeout执行顺序

前段时间领导给我们出了一道题,关于async/await、promise和setTimeout的执行顺序,网上查了查资料,这是头条的一道笔试题,记录一下,加深理解。 题目如下: async function async1() { console.log('async1 start'); await async2(); console.log('asnyc1 end'); } async...

yun_hou的博客 3万+

模拟ic入门——设计一个单极运放(一)单级运算放大器设计基础

主要介绍了单级运放的基本理论和使用场景

qq_64956710的博客 3750

Promise、 Async/await 、setTimeOut执行顺序及区别

最终结果:setTimeout属性宏任务,Promise里面的then方法属于微任务,/Await中await语法后面紧跟的表达式是同步的,但接下来的代码是异步的,属于微任务。1、 js是单线程所有主线程的先执行,然后执行的程序,最后执行队列,秉承的原则。包括同步任务、异步任务,又包括宏观任务和微观任务2、执行顺序:同步任务——>微观任务——>宏观任务。

weixin_51225684的博客 2095

撸毛笔记-朴朴超市 v1.01

朴朴超市 v1.01脚本地址:自动签到和组队赚朴分, 朴分可以抵扣50%的金额组队瓜分需要4人成团, 每个号每天只能开团和入队各一次每天跑一两次即可使用扫码或自己想办法捉refreshToken扫码获取token: (先微信进入朴朴超市小程序并登录注册过账号再扫码)把获取的refreshToken和备注(非必须)填到文件pupuCookie.txt里(第一次运行会自动创建), 多账号换行或&或@隔开。

xiaoshun007的专栏 1813

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

js关于async/await、promise和setTimeout执行顺序

前段时间看到了一道面试题,关于async/await、promise和setTimeout的执行顺序,觉得挺有意思的,记录一下,加深理解。

qq_53026081的博客 1219

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

async/await、promise和setTimeout的执行顺序是怎样的?

在计算机科学中,异步编程是指一种程序设计模式,其中程序在等待某些操作完成时不会阻塞。这使得程序能够在等待操作完成的同时执行其他任务。异步编程在Web开发中特别有用,因为许多Web应用程序需要与远程服务器交互,而这些交互可能会花费很长时间。JavaScript是一种单线程编程语言,这意味着它一次只能执行一个任务。这使得在JavaScript中进行异步编程尤其重要。

tyxjolin的专栏 1386

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

JS中setTimeout、promise、async、await的执行顺序

宏任务(从上到下、从左到右的整体)微任务的Event Queue(Promise.then,async / await整体,process.nextTick【node环境】)宏任务的Event Queue(setTimeout / setInterval / setImmediate【node环境】)同一轮微任务队列中,依次顺序执行、、和同一轮宏任务队列中,在setTimeout之后执行在浏览器环境同一轮任务队列中,在setTimeout之前执行script。...

天问博客-专注于大前端技术 1908

【面试题】async/await、promise和setTimeout的执行顺序

事件的执行顺序,是先执行宏任务,然后执行微任务,这个是基础,任务可以有同步任务和异步任务,同步的进入主线程,异步的进入Event Table并注册函数,异步事件完成后,会将回调函数放入Event Queue中(宏任务和微任务是不同的Event Queue),同步任务执行完成后,会从Event Queue中读取事件放入主线程执行,回调函数中可能还会包含不同的任务,因此会循环执行上述操作。此时的await会让出线程,阻塞async内后续的代码,先去执行async外的代码。大厂面试题分享 面试题库。

web全栈开发的博客 4470

前端Vue中async/await、promise 和setTimeout工作原理和执行顺序

当async函数中有await时,会暂停函数的执行,等待await后面的表达式的promise对象完成(要么resolved,要么rejected)。4、执行async2(),输出async2,并返回了一个promise对象,await让出了线程,把返回的promise加入了微任务异步队列,所以async1()下面的代码也要等待上面完成后继续执行;2. 当遇到Promise对象时,会立即执行其内部代码。状态,那么它的回调函数会被放入微任务队列中,等待当前同步代码和事件队列中的任务执行完毕后才会执行。

chenchuang0128的博客 1920

setTimeout,promise,async/await执行顺序

实例 async function async1() { console.log('async1 start'); await async2(); console.log('async1 end'); } async function async2() { console.log('async2 start'); } console.log('script start'); setTimeout(function () { console.log

YOYOyxl的博客 492

promise、async、await、settimeout异步原理与执行顺序

一道经典的前端笔试题,你能一眼写出他们的执行结果吗? async function async1() { console.log("async1 start"); await async2(); console.log("async1 end"); } async function async2() { console.log( 'async2');

极客神殿 1319

setTimeout、Promise、Async/Await 的执行顺序

问题描述:以下这段代码的执行结果 async function async1() { console.log('async1 start'); await async2(); console.log('asnyc1 end'); } async function async2() { ...

avl98352的博客 452

JS异步--async,await,promise,setTimeout 执行顺序

.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rgba(51, 51, 51, 1) } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .ma...

优快云_KONGlX的博客 675

我终于搞懂了async/await、promise和setTimeout的执行顺序

javascript是一门单线程语言,在最新的HTML5中提出了Web-Worker,但javascript是单线程这一核心仍未改变。所以一切javascript版的"多线程"都是用单线程模拟出来的,一切javascript多线程都是纸老虎!

张先生的前端日志 444
上一篇: 设置npm源的命令
下一篇: vue混入
coderheart
博客等级 码龄5年 10粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值