Promise,async和js的事件循环机制
2023-12-25 00:31:33
Promise
Promise有等待,已成功,失败,三种状态,状态的改变会触发then回调函数和catch回调函数。
当执行一个Promise时,它会立刻返回一个Promise对象,并且不会阻塞后续代码执行。
当Promise的状态发生改变后,相应的回调函数会被放入微任务队列。
Js的事件循环机制
通过js 的事件循环机制,从而执行promise以及DOM事件,Ajax请求,而不会阻塞。
js引擎的事件循环,使得js单线程的同时可以执行非阻塞任务。
流程如下:
while (true) {
// 执行同步任务()
while (stack.isNotEmpty()) {
executeSyncTask();
}
// 执行微任务队列的所有微任务
while (microtaskQueue.isNotEmpty()) {
executeMicrotask();
}
// 执行宏任务: 从宏任务中取出一个任务放入执行栈中执行。
if (taskQueue.isNotEmpty()) {
macroTask = taskQueue.dequeue();
executeMacroTask(macroTask);
}
}
同步任务:即主线程代码。
微任务:通常是用于处理Promise的回调函数(Promise的then和catch方法)。即当Promise的状态改变后,会将其回调函数放到微任务队列。
异步任务(宏任务):是由浏览器环境提供的任务,包括整体代码块,定时器,事件监听器,AJAX请求回调等。如果遇到异步任务,就将其添加到异步任务队列中。
async和awaite
async将函数标记为异步函数(异步函数就是返回值是Promise的函数)
Async func(){
const response=await fetch(“http://…”);//会等待fetch请求返回
const response=await fetch(“http://…”);//串行执行,等待第一个fetch执行完成后才执行
}
async func(){
const response1 =fetch(“http://…”)
const response2 =fetch(“http://…”)
const [a,b] = await Promise.all([response1,response2]);//会同步发起fetch请求,效率提高一倍
}
文章来源:https://blog.csdn.net/qq_35693377/article/details/135187850
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!