zoukankan      html  css  js  c++  java
  • jquery的promise和es6的promise的区别

    大概意思是:浏览器中的任务队列不止一个,且优先级也不同。基本上可以分为如下两种:
    macro-task: script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering
    micro-task: process.nextTick, 原生Promise, Object.observe, MutationObserver
    我们看到原生PromisesetTimeout分别属于micro-taskmacro-task。我们之前说的异步任务队列,指的是macro-task。而micro-task的执行顺序,与之不同。

    在执行完主线程上的所有任务时,会先去查看micro-task队列中有没有任务,如果有,则依次执行micro-task队列中的所有任务,之后才去查看macro-task队列。每次拿到macro-task队列上任务并执行之后,都会去检查micro-task队列,以此循环。

    https://segmentfault.com/q/1010000008612124

    我们都知道javascript是单线程的,也就是说,一个时间只能做一件事。所以,所有的任务都要按照一定的顺序排队,然后一个一个执行。如果所有的任务都是同步的,那就没有什么问题,代码按照从前到后的顺序依次执行就可以了,但我们实际工作过程中,难免会有一些操作需要异步执行——比如事件,比如ajax,比如setTimeout

    所以,浏览器会维护一个任务队列(task queue),任务队列是先进先出的,也就是说,先进入任务队列的会先执行。当主线程任务执行完毕,就会查看任务队列中有没有新任务,如果有,则把第一个任务放到主线程中执行,以此循环往复,这个过程也就是Event loops

    我之前也一直都以为浏览器中只有一个任务队列,看到这个问题后才知道。原来浏览器中的任务队列不止一个,且优先级也不同。基本上可以分为如下两种:

    macro-task: script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering
    micro-task: process.nextTick, 原生Promise, Object.observe, MutationObserver

    我们看到原生PromisesetTimeout分别属于micro-taskmacro-task。我们之前说的异步任务队列,指的是macro-task。而micro-task的执行顺序,与之不同。

    在执行完主线程上的所有任务时,会先去查看micro-task队列中有没有任务,如果有,则依次执行micro-task队列中的所有任务,之后才去查看macro-task队列。每次拿到macro-task队列上任务并执行之后,都会去检查micro-task队列,以此循环。所以上面题目中结果是12354就很明了了。

    2017-05-20 21:24

  • 相关阅读:
    N 种仅仅使用 HTML/CSS 实现各类进度条的方式
    使用 CSS 轻松实现一些高频出现的奇形怪状按钮
    通过jdb命令连接远程调试的方法
    (转)Python中asyncio与aiohttp入门教程
    (转)从0到1,Python异步编程的演进之路
    (转)python︱用asyncio、aiohttp实现异步及相关案例
    (转)Python 如何仅用5000 行代码,实现强大的 logging 模块?
    (转)python的dict()字典数据类型的方法详解以及案例使用
    (转)Python Async/Await入门指南
    (转)Python运维自动化psutil 模块详解(超级详细)
  • 原文地址:https://www.cnblogs.com/starof/p/6883225.html
Copyright © 2011-2022 走看看