JS promise 的回调和 setTimeout 的回调到底谁先执行

当JS中存在多个回调函数时,它们的执行顺序由它们注册的顺序决定。考虑以下例子:

setTimeout(() => {
  console.log('Timeout callback');
}, 0);

Promise.resolve().then(() => {
  console.log('Promise callback');
});

这里我们有一个setTimeout回调和一个promise回调。许多人会认为,setTimeout的回调先于Promise回调执行,因为setTimeout的时间间隔为0,无论如何都会先执行。然而,实际执行结果是Promise回调先执行,因为Promise回调是由微任务处理的,而setTimeout回调是由宏任务处理的。

具体来说,当推入promise回调函数时,它会被添加到当前执行线程的微任务队列中,并在当前宏任务结束之前执行。此时setTimeout回调被添加到了属于下一批宏任务的任务队列中,因此当宏任务结束并开始另一个任务时,setTimeout回调会在Promise回调之后执行。

另一个例子:

setTimeout(() => {
  console.log('Timeout callback');
  Promise.resolve().then(() => {
    console.log('Promise callback');
  });
}, 0);

在这种情况下,setTimeout回调函数先执行,但是由于promise回调函数是由setTimeout回调函数内的微任务队列处理的,因此Promise回调函数在setTimeout回调函数执行结束后立即执行。

总之,当存在多个回调函数时,我们必须要考虑它们注册的顺序和它们所属的队列类型,以确定它们的执行顺序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS promise 的回调和 setTimeout 的回调到底谁先执行 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • js实现图片放大展示效果

    下面是我对“js实现图片放大展示效果”的完整攻略。 1. 确定需求 首先,我们需要明确需求:实现图片鼠标悬停放大的效果,即鼠标移动到图片上,图片放大并显示原始尺寸,鼠标离开图片,图片恢复到原来的大小。 2. 编写HTML代码 编写HTML代码时,我们需要将每张图片都包含在一个容器中,方便后续的样式设置和JS代码编写。 例如,我们可以这样编写HTML代码: &…

    JavaScript 2023年6月10日
    00
  • JavaScript window.document的属性、方法和事件小结

    那么让我们来详细讲解“JavaScript window.document的属性、方法和事件小结”的攻略。 文档对象模型(DOM) 首先,我们需要了解文档对象模型(DOM),这是一种针对HTML和XML文档的面向对象编程接口,我们可以通过DOM操作HTML文档的元素、属性和样式等。在JavaScript中,DOM是非常重要的一个概念,也是JavaScript…

    JavaScript 2023年6月10日
    00
  • Javascript中作用域的详细介绍

    Javascript中作用域的详细介绍 Javascript中的作用域是指变量的可见范围,也就是在代码中访问变量的能力。在Javascript中,有全局作用域和局部作用域之分。在全局作用域中声明的变量,可以被程序中的任何其他代码所访问,而在局部作用域中声明的变量,只能被函数内部代码所访问。 全局作用域 全局作用域是在所有函数的外部声明变量的作用域。在全局作用…

    JavaScript 2023年5月28日
    00
  • javascript中删除指定数组中指定的元素的代码

    当需要从JavaScript中的数组中删除特定的元素时,可以使用以下几种方法: 1.使用splice()方法 splice()方法可用于更改数组的内容,通过指定要更改的内容和其更改方式进行更改。在这种情况下,我们可以将其用于从数组中删除特定元素。 使用方式如下: array.splice(index, howMany[, element1[, …[, e…

    JavaScript 2023年6月11日
    00
  • 微信小程序实现循环动画效果

    下面是关于“微信小程序实现循环动画效果”的完整攻略: 1. 准备工作 在开始实现动画效果之前,我们需要进行一些准备工作。首先,在小程序的根目录下创建一个名为“animations”的子目录,用于存放所有的动画帧图片。然后,在小程序的根目录下的app.json文件中,引入需要使用的图片资源。例如: "pages": [ "page…

    JavaScript 2023年6月11日
    00
  • JavaScript异步加载浅析

    JavaScript 异步加载浅析 在网页开发中,我们经常会遇到需要加载外部资源(如CSS、JS等)的情况。传统的加载方式是同步加载,即在加载完一个资源后才会加载下一个资源,这样会导致页面加载速度较慢,影响用户体验。因此,异步加载成为了一个非常重要的技术。 异步加载是指在加载资源的同时,不会阻塞页面的其他操作,而是充分利用空闲时间进行资源加载。在 JavaS…

    JavaScript 2023年5月27日
    00
  • JavaScript程序员应该知道的45个实用技巧

    JavaScript程序员应该知道的45个实用技巧,是一篇有关于JavaScript编程的高质量技术指南。该指南列举了45个实用技巧,帮助JavaScript程序员更有效率和高效地工作。 以下是该攻略的完整说明: 目录 第1条:使用console.table格式化输出 第2条:使用Array.from()将类数组对象转换为数组 第3条:使用Array.isA…

    JavaScript 2023年5月18日
    00
  • Javascript实现表单检验

    下面是Javascript实现表单检验的完整攻略。 什么是表单检验 表单检验是指在前端页面中对用户输入的数据进行验证的一种技术手段。它可以用来保证提交给后端的数据的正确性和完整性,从而提高数据的质量和可靠性。 Javascript实现表单检验的步骤 下面是Javascript实现表单检验的一般步骤: 获取表单元素及其值 根据指定的规则进行数据验证 根据验证结…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部