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

  • 相关阅读:
    CentOS7 配置163 yum源(详细步骤)
    从构建分布式秒杀系统聊聊分布式锁
    互联网架构“高并发”
    互联网架构“高可用”
    FineCMS
    layUI表单事件监听-事件监听机制简化处理
    界面优雅的UI框架layUI
    如果OCX使用onmousedown和onmouseup来决定指令发送和指令停止会不会有问题?
    CSS字体库font-face用法及跨域问题
    RequireJS被外部调用
  • 原文地址:https://www.cnblogs.com/starof/p/6883225.html
Copyright © 2011-2022 走看看