前端随笔(四)————异步执行.Promise与setTimeout的执行顺序

本文探讨了Promise和setTimeout在JavaScript中的异步执行顺序。Promise代表异步操作,属于微任务,而setTimeout是宏任务。JavaScript会先执行所有微任务,再执行宏任务,这意味着无论代码书写顺序如何,Promise总是先于setTimeout执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们来看看MDN中对Promise与setTimeout的定义与解释;

1.Promise

Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。

一个 Promise 对象代表一个在这个 promise 被创建出来时不一定已知的值。它让您能够把异步操作最终的成功返回值或者失败原因和相应的处理程序关联起来, 这样使得异步方法可以像同步方法那样返回值。本质上 Promise 是一个函数返回的对象,我们可以在它上面绑定回调函数,这样我们就不需要在一开始把回调函数作为参数传入这个函数了。

一个 Promise 必然处于以下几种状态之一:

  • 待定(pending): 初始状态,既没有被兑现,也没有被拒绝。
  • 已兑现(fulfilled): 意味着操作成功完成。
  • 已拒绝(rejected): 意味着操作失败。

2.setTimeout

JS中,可以通过setTimeout方法设置一个定时器,规定在定时器延迟指定时间后执行相对应的程序;

常用属性:

function,这是你想要在到期时间(delay毫秒)之后执行的函数

code,这是一个可选语法,你可以使用字符串而不是function ,在delay毫秒之后编译和执行字符串 (使用该语法是不推荐的, 原因和使用 eval()一样,有安全风险)。

delay,延迟的毫秒数 (一秒等于1000毫秒),函数的调用会在该延迟之后发生。如果省略该参数,delay取默认值0,意味着“马上”执行。

二者在执行顺序上的区别;

首先,Promise与setTimeout本质上都是异步操作,前者属于异步微任务(microtask),后者则是异步宏任务(macrotask)。

在JS的编译与执行过程中,当进行到异步操作时,会优先处理微任务,直到所有微任务与同步程序处理完毕才会开始处理宏任务。而与程序中代码的书写顺序无关(即使setTimeout写在Promise前也是如此。)

因此,二者的实际执行顺序是:先执行Promise,后执行setTimeout。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值