前端 js 异步流程(二)

简介: 前端 js 异步流程(二)

案例 3:

console.log(1)
setTimeout(function() {
  console.log(2)
}, 2000)
new Promise(function(resolve) {
  console.log(3)
  resolve()
}).then(function() {
  console.log(4)
})
setTimeout(function() {
  console.log(5)
  new Promise(function(resolve) {
    console.log(6)
    resolve()
  }).then(function() {
    console.log(7)
  })
}, 3000)
setTimeout(function() {
  console.log(8)
  new Promise(function(resolve) {
    console.log(9)
    resolve()
  }).then(function() {
    console.log(10)
  })
}, 1000)


答案:1、3、4、8、9、10、2、5、6、7


解析:

  1. 区分同步任务和异步任务
console.log(1) // 同步任务
setTimeout(function() {
  console.log(2) // 异步任务
}, 2000)
new Promise(function(resolve) {
  console.log(3) // 同步任务
  resolve()
}).then(function() {
  console.log(4) // 异步任务
})
setTimeout(function() {
  console.log(5) // 异步任务
  new Promise(function(resolve) {
    console.log(6)
    resolve()
  }).then(function() {
    console.log(7)
  })
}, 3000)
setTimeout(function() {
  console.log(8) // 异步任务
  new Promise(function(resolve) {
    console.log(9)
    resolve()
  }).then(function() {
    console.log(10)
  })
}, 1000)


  1. 执行同步任务
console.log(1)
console.log(3)


  1. 异步任务添加到不同任务队列中

微任务添加到微任务队列[ console.log(4) ]

new Promise(function(resolve) {
  console.log(3)
  resolve()
}).then(function() {
  console.log(4) // 微任务
})


宏任务

由宿主发起异步,异步完成将回调放入宏任务队列

setTimeout(function() {
  console.log(2) // 异步任务
}, 2000)
setTimeout(function() {
  console.log(5) // 异步任务
  new Promise(function(resolve) {
    console.log(6)
    resolve()
  }).then(function() {
    console.log(7)
  })
}, 3000)
setTimeout(function() {
  console.log(8) // 异步任务
  new Promise(function(resolve) {
    console.log(9)
    resolve()
  }).then(function() {
    console.log(10)
  })
}, 1000)


进入宏任务队列

// 宏任务1:
function(){
  console.log(8) // 异步任务
  new Promise(function(resolve){
    console.log(9)
    resolve()
  }).then(function(){
    console.log(10)
  })
}
// 宏任务2:
function(){
  console.log(2) // 异步任务
}
// 宏任务3:
function(){
  console.log(5) // 异步任务
  new Promise(function(resolve){
    console.log(6)
    resolve()
  }).then(function(){
    console.log(7)
  })
}


  1. 执行微任务[]
console.log(4)


  1. 微任务已全部执行完成,接下来执行下一个宏任务
// 宏任务1:
function(){
  console.log(8)
  new Promise(function(resolve){
    console.log(9)
    resolve()
  }).then(function(){
    console.log(10) // 进入微任务
  })
}


console.log(8)
console.log(9)


  1. console.log(10)进入微任务:[console.log(10)]
console.log(10) // 微任务[]


  1. 微任务空,执行下一个宏任务
// 宏任务2:
function(){
  console.log(2) // 异步任务
}
console.log(2)


  1. 微任务中还是空,继续执行下一个宏任务
function(){
  console.log(5) // 异步任务
  new Promise(function(resolve){
    console.log(6)
    resolve()
  }).then(function(){
    console.log(7) // 进入微任务
  })
}


console.log(5)
console.log(6)


  1. 微任务中有[console.log(7)]
console.log(7)


  ```js
  console.log(2)


  1. 微任务中还是空,继续执行下一个宏任务
function(){
  console.log(5) // 异步任务
  new Promise(function(resolve){
    console.log(6)
    resolve()
  }).then(function(){
    console.log(7) // 进入微任务
  })
}
console.log(5)
console.log(6)


  1. 微任务中有[console.log(7)]
console.log(7)


  1. 最后微任务清空,宏任务也清空


目录
相关文章
|
4天前
|
JavaScript Java 测试技术
基于springboot+vue.js的工作流程管理系统附带文章和源代码设计说明文档ppt
基于springboot+vue.js的工作流程管理系统附带文章和源代码设计说明文档ppt
7 0
|
5天前
|
缓存 前端开发 JavaScript
基于JavaScript的前端性能优化技术探讨
基于JavaScript的前端性能优化技术探讨
18 1
|
8天前
|
JavaScript 前端开发 Java
前端知识点03(JS)
前端知识点概览:了解JS中的this指向,包括全局、函数、new、apply/call/bind及箭头函数的规则。理解script的async和defer属性对脚本加载和执行的影响。探讨setTimeout和setInterval的用法及其在性能上的考量。ES6与ES5的区别在于新语法特性,如let/const、箭头函数、模板字符串、模块化、类和继承等。此外,ES6还引入了Symbol、解构赋值、默认参数、Map/Set和Generator等功能。别忘了点赞和支持作者哦!
17 1
|
8天前
|
JavaScript 前端开发
前端面试02(JS)
本文是前端面试系列的第二篇,主要涵盖了JavaScript的基础知识,包括JS的组成(ECMAScript、DOM、BOM)、内置对象(如String、Array、Math、Date等)、数组操作方法、数据类型检测方法(typeof、instanceof、constructor、Object.prototype.toString.call)、闭包的概念及其特点、前端内存泄漏的原因和类型、事件委托的优势、基本数据类型与引用数据类型的差异、原型链的工作原理以及JS实现继承的多种方式(原型链、构造函数、组合继承等)。文章结尾鼓励读者点赞和支持作者。
9 1
|
9天前
|
JavaScript 前端开发 NoSQL
构建基于Node.js的全栈应用:从前端到后端的完整指南
【5月更文挑战第24天】本文是关于使用Node.js构建全栈应用的指南,涵盖前端(React或Vue)、后端(Node.js + Express)和数据库(MongoDB)的选型与实现。文章介绍了项目结构、前端组件化开发、后端API接口编写、前后端联调及部署上线的注意事项,帮助读者掌握全栈开发流程。
|
11天前
|
移动开发 JavaScript 前端开发
【热门话题】Vue.js:现代前端开发的轻量级框架之旅
Vue.js,由尤雨溪于2014年创建,是一个轻量级的前端框架,因其简洁API、高效渲染和组件系统深受全球开发者喜爱。本文探讨Vue的核心理念、技术架构、开发实践及在现代Web开发中的应用。Vue遵循渐进式框架思想,提供声明式编程、组件化和响应式数据绑定。技术上,它采用双向数据绑定、虚拟DOM和生命周期钩子。开发实践中,Vue CLI和Vuex、Vue Router分别加速开发和管理状态、路由。Vue不仅适用于单页应用,还支持多页应用、移动开发和跨平台项目,拥有丰富的社区生态和插件。随着Vue 3的推出,Vue将持续创新并影响前端开发领域。
33 0
|
18天前
|
Web App开发 缓存 前端开发
前端性能优化的整理笔记(一)
前端性能优化的整理笔记(一)
110 0
|
16天前
|
移动开发 前端开发 JavaScript
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
|
18天前
|
存储 前端开发 JavaScript
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
45 1
|
18天前
|
XML 编解码 前端开发
css设计文本样式 前端开发入门笔记(十二)
css设计文本样式 前端开发入门笔记(十二)
12 0