当前位置:网站首页 > R语言数据分析 > 正文

promise settimeout promise.all async/await的打印顺序

promise settimeout promise.all async/await的打印顺序

在理解 Promise、setTimeout、Promise.all 和 async/await 的打印顺序之前,我们需要了解它们的行为和执行机制。

  1. Promise:Promise 是 JavaScript 中处理异步操作的对象。它表示一个异步操作的最终完成(或失败)及其结果值。Promise 有三种状态:pending(进行中)、fulfilled(已完成)和 rejected(已拒绝)。可以通过调用 then() 方法或使用 async/await 语法来处理 Promise 的结果。
  2. setTimeout:setTimeout 是一个计时器函数,用于在指定的时间间隔之后执行一次指定的函数或一段代码。
  3. Promise.all:Promise.all 接收一个 Promise 对象数组,并返回一个新的 Promise 对象。它会等待数组中的所有 Promise 对象都变为 fulfilled 状态后,才会将结果作为一个数组传递给新的 Promise。
  4. async/await:async/await 是 ES2017 引入的一种处理异步操作的语法糖。使用 async 关键字定义的函数会返回一个 Promise 对象,而在 async 函数内部使用 await 关键字可以暂停函数的执行,等待 Promise 对象的状态变为 fulfilled,然后将结果返回。

现在来看一下它们的打印顺序:

// 示例代码 console.log('Start'); setTimeout(() => { 
    console.log('setTimeout'); }, 0); Promise.resolve().then(() => { 
    console.log('Promise 1'); }); Promise.resolve().then(() => { 
    console.log('Promise 2'); }); (async () => { 
    await Promise.resolve(); console.log('Async'); })(); Promise.all([ Promise.resolve(), Promise.resolve() ]).then(() => { 
    console.log('Promise.all'); }); console.log('End'); 

按照以上代码的执行顺序,输出结果通常是:

Start End Promise 1 Promise 2 Async Promise.all setTimeout 

解释一下这个顺序:

  1. 首先输出 “Start”,然后立即输出 “End”,因为它们是同步代码。
  2. 接下来是两个 Promise 的回调函数,它们被添加到微任务队列中,按照添加顺序依次执行。所以先输出 “Promise 1”,然后输出 “Promise 2”。
  3. 然后是 async/await 中的代码,它也是一个微任务,会等待前面的 Promise 回调函数执行完毕后才执行。所以输出 “Async”。
  4. 接下来是 Promise.all 的回调函数,它会等待 Promise.all 的所有 Promise 对象都变为 fulfilled 状态,然后执行。所以输出 “Promise.all”。
  5. 最后是 setTimeout,它是一个宏任务,会在下一个事件循环中执行。所以输出 “setTimeout”。

需要注意的是,由于事件循环的机制,实际的执行顺序可能会有微小的差异,但以上的顺序是最常见的情况。

到此这篇promise settimeout promise.all async/await的打印顺序的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 会话存储sessionStorage之token、用户 & 设置-sessionStorage.setItem(‘num‘, ‘张三‘)、获取sessionStorage.getItem(‘num‘)2024-12-02 16:45:06
  • 登录和注册(一)注册——axios之get请求图片验证码-base64、密码由特殊字符组成、用户名密码相同重写、校验之邮箱注册和手机注册 & 定时setInterval和clearInterval2024-12-02 16:45:06
  • 登录和注册(二)注册成功提示页——邮箱注册和手机注册 & 定时setInterval和clearInterval & router.push & 原生请求写法http.post & public引图片2024-12-02 16:45:06
  • 登录和注册(四)重新修改密码页——清除session之sessionStorage.removeItem2024-12-02 16:45:06
  • props的几种写法——defineProps定义props、toRefs接收props、computed中get和set写法、watch深度监听immediate-true2024-12-02 16:45:06
  • vu3中,时间组件el-date-picker起止日期限制——开始日期限制、结束日期限制2024-12-02 16:45:06
  • echarts中y轴(yAxis)的参数配置项释义 & dataZoom滚动条参数释义2024-12-02 16:45:06
  • echarts参数配置示例——legend图例属性设置 & tooltip之formatter自定义显示内容2024-12-02 16:45:06
  • 清除ElementUI的el-input标签的校验——使用validate方法-区别之resetFields()-移除校验结果并重置字段值 & clearValidate()-移除校验结果2024-12-02 16:45:06
  • rollup学习笔记2024-12-02 16:45:06
  • 全屏图片