Promise连续then与setTimeout的执行顺序?

Promise的then是异步操作的回调,但如果连续调用then,并且不再then中添加任何异步操作,它是会直接当做同步代码处理吗?,在then1放入微任务队列后,then2和then3是何时放进去的,是一起吗?

new Promise((res, rej) => {
  res()
}).then((v) => { // then1
  console.log(1)
  return 2
}).then(v => {  // then2
  console.log(v)
}).then(v => { // then3
  console.log(v)
})
setTimeout(() => {
  console.log('setr')
}, 0);
// 1
// 2
// undefined
// setr

还有下面的代码then返回promise执行结果与上面一样,是什么原因?求大佬解惑

let p = new Promise((res, rej) => {
  res()
  console.log('p')
}).then((v) => {
  console.log(1)
  return new Promise((res, rej)=>res(2))
}).then(v => {
  console.log(v)
  return new Promise((res, rej)=>res(3))
}).then(v => {
  console.log(v)
})
setTimeout(() => {
  console.log('setr')
}, 0);
console.log('global')
阅读 2.9k
1 个回答

event loop

微任务队列清空了,然后再去看宏任务

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏