new Promise是宏任务还是微任务
时间: 2023-10-21 07:57:01 浏览: 275
在 JavaScript 中,Promise 是微任务(microtask),而不是宏任务(macrotask)。
微任务是指在当前任务执行结束后立即执行的任务,比如 Promise 回调、MutationObserver 回调等。而宏任务则是指需要等待事件循环下一轮执行的任务,比如 setTimeout 回调、setInterval 回调、用户交互事件等。
因此,当我们使用 Promise 时,它的回调函数会被添加到微任务队列中,在当前任务执行结束后立即执行。这个特性使得 Promise 可以方便地处理异步任务,避免了回调地狱和层层嵌套的问题。
相关问题
new Date()是宏任务吗
new Date()不是宏任务。new Date()是JavaScript中用于创建表示当前日期和时间的对象的方法。它是一个同步操作,不会被推入宏任务队列或微任务队列中。它会立即执行并返回一个表示当前日期和时间的对象。所以new Date()不会影响宏任务或微任务的执行顺序。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Promise与宏任务、微任务](https://blog.csdn.net/flow_camphor/article/details/120322831)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
setTimeout(function(){ console.log('setTimeout 1') },0); new Promise(resolve => { console.log('script end'); resolve() }).then(function () { console.log('promise resolve 1') }).then(function () { console.log('promise resolve 2') }); Promise.resolve().then(function () { console.log('promise resolve 3') }); console.log('script start')
这段代码的执行顺序如下:
1. console.log('script start') 首先被执行,打印出 "script start"。
2. new Promise() 中的代码被执行,打印出 "script end"。
3. Promise.resolve().then() 中的代码被执行,打印出 "promise resolve 3"。
4. setTimeout() 中的代码被放入宏任务队列中,等待执行。
5. Promise.then() 中的第一个回调函数被放入微任务队列中,等待执行。
6. Promise.then() 中的第二个回调函数被放入微任务队列中,等待执行。
7. JavaScript 主线程空闲时,开始执行微任务队列中的回调函数。
8. 执行 Promise.then() 中的第一个回调函数,打印出 "promise resolve 1"。
9. 执行 Promise.then() 中的第二个回调函数,打印出 "promise resolve 2"。
10. JavaScript 主线程空闲时,开始执行宏任务队列中的任务。
11. 执行 setTimeout() 中的回调函数,打印出 "setTimeout 1"。
因此,最终输出的结果是:
```
script start
script end
promise resolve 3
promise resolve 1
promise resolve 2
setTimeout 1
```
阅读全文