JS关于Promise和setTimeout的那些事儿

JS关于Promise和setTimeout的那些事儿

话不多说先上题:

new Promise(res=>{
setTimeout(()=>{console.log(000)},0)
res()
}).then(res=>{setTimeout(()=>{console.log(11111)},0)})

setTimeout(()=>{console.log(2222222)},0)

输出是这个样子:

在这里插入图片描述
前端面试里面,这个知识点是非常常考的。

具体跟事件循环,主线程,任务队列,宏任务,微任务有关。

Promise会放在微任务队列里面,属于异步任务。

同步任务执行完成以后,会先执行Promise函数。

再执行宏任务里面的setTimeout函数等。

但这个题比较复杂,Promise和setTimeout嵌套了,脑子好像无法思考了。

然后输出的这个918是干什么呢?918纪念日???

那我们把代码变得简单一点:

new Promise(res=>{
setTimeout(()=>{console.log(000)},0)
res()
}).then(console.log(11111))

setTimeout(()=>{console.log(2222222)},0)

在这里插入图片描述

new Promise(res=>{
console.log(0000);
res()
}).then(console.log(11111))

setTimeout(()=>{console.log(2222222)},0)

在这里插入图片描述
这样就清楚多了。

先挖个坑,前面具体原理日后来补。

保佑能找到工作!

加油!

发现一篇大佬的好文:
https://blog.csdn.net/weixin_34050389/article/details/88679335

另,已找到实习,超开心,未来也要努力学习!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: promisesetTimeout都是JavaScript中常用的异步编程方式,但是它们的应用场景和特点略有不同。 promise是一种用于处理异步操作的对象,它可以将异步操作的结果传递给相关代码,以便于异步操作完成后进行后续处理。Promise有三种状态:Pending(进行中)、Resolved(已完成)和Rejected(已失败),当异步操作完成后,可以将Promise状态从Pending改为Resolved或者Rejected,并将相应的结果传递给相关代码。 setTimeout是一种用于在一定时间后执行某个函数的方法。它会在指定的时间间隔之后将指定的代码添到任务队列中,并在执行栈为空时执行该代码。setTimeout是一种延时执行的方法,通常用于在等待一段时间之后执行某些操作,比如延迟载资源或者实现一些动画效果。 从应用场景来看,Promise通常用于需要处理异步操作结果的场景,而setTimeout通常用于需要在一定时间之后执行某些代码的场景。从技术特点来看,Promise可以很好地处理异步操作的结果,而setTimeout主要是用于延时执行某些代码。因此,在不同的场景下,选择使用Promise或者setTimeout都需要考虑具体的需求和实现方式。 ### 回答2: 在JavaScript中,PromisesetTimeout是两个不同的概念,它们的执行顺序取决于具体的代码逻辑和使用方式。 Promise是一种异步编程的解决方案,用于处理一些需要花费时间的操作。当我们创建一个Promise对象时,其中的代码会被立即执行,并且可以设置回调函数处理异步操作的结果。一旦Promise对象的状态发生改变(可以是fulfilled满足或rejected拒绝),相应的回调函数将会被调用。 而setTimeoutJavaScript的一个定时器函数,用于在指定的延迟时间之后执行一段代码。当我们使用setTimeout函数时,其中的代码会被放入到一个任务队列中,在指定的延迟时间之后,才会被执行。 根据执行机制,Promise通常拥有更高的优先级。Promise对象中的代码会立即执行,而setTimeout中的代码则会在其他同步任务执行完毕后才会被执行。也就是说,Promise中的代码会被优先执行,而setTimeout中的代码会在Promise对象执行完毕后才会被执行。 然而,如果我们使用了async/await等异步操作,PromisesetTimeout的执行顺序就有可能受到影响。在这种情况下,可能会出现在Promise中的代码还未执行完毕,但由于设置了一个较短的延迟时间,setTimeout中的代码先被执行的情况。 总结起来,Promise通常拥有更高的优先级,其代码会立即执行。setTimeout中的代码会在Promise代码执行完毕后才会被执行,除非使用了某些特殊的异步操作方式。 ### 回答3: PromisesetTimeout没有优先性的比较,因为它们是完全不同的东西。 Promise是一种处理异步操作的机制,它可以用于处理异步操作的状态和结果。当我们创建一个Promise对象时,它可以包含异步操作的结果,并提供一些方法来处理成功或失败时的逻辑。Promise的执行顺序由代码中的逻辑和异步操作的执行时间决定,与setTimeout没有直接的关系。 setTimeout是一个用于设置在一定延迟时间后执行的函数的方法。它允许我们在指定的延迟时间之后执行一段代码。setTimeout的执行时间是相对于调用它的时刻来计算的,它不受Promise的状态或结果影响。 根据上述解释,PromisesetTimeout在执行顺序上没有优先性的比较。它们是独立的概念,用于不同的目的。Promise用于处理异步操作的状态和结果,而setTimeout用于延迟执行一段代码。在实际开发中,我们可以根据需求选择使用PromisesetTimeout,或者它们的组合来处理不同的情况。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值