Navigation

    西南IT社区
    • Register
    • Login
    • Search
    • 主页
    • 问答
    • 话题
    • 热门
    • 圈子
    • 工作机会
    • 活动
    • 项目

    用Promise实现异步编程

    极客生涯
    es6 javascript 用promise实现异步编程
    1
    1
    97
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • 红
      红楼鬼影 last edited by

      JavaScript是一门单线程的编程语言,所以没有什么真正意义上的并行特。它的存在是为了协调事件处理、页面交互、脚本调用、UI渲染、网络请求等一些行为并且对主线程造成的影响,因此,event loop事件循环方案应运而生。

      事件循环简单来说就是一个不断的在等待任务、执行任务的方案。在JavaScript语言中,根据执行方式的不同,被分为两种状态的任务,分别是同步任务和异步任务。

      同步任务和异步执行的顺序是:同步任务的执行方式是率先执行,而后执行异步任务,所有的异步任务都由两个队列存储,分别是:宏任务队列,微任务队列,两个队列中一旦有任务,将在全部执行完成后才会去执行宏任务。宏任务队列中的任务在执行完成后,会检查微任务队列中是否有新添加的任务,如果有新添加的任务,那么将会去执行微任务队列中所有新添加的任务,如果没有则会继续执行下一个宏任务。

      3e9fc499-d935-4afe-b011-d28c32a0af9c-image.png

      主线程是在执行完同步任务后,会不断的从这两个任务队列中按照先进先出的策略取出异步任务并且进行执行。并且在此期间也会有新的事件不断的加入至各个任务队列中,以此循环往复、永不阻塞。

      cc01ee33-137d-45e6-a42d-53ab4373bb00-image.png

      Promise是在ES6中出现的新功能,用于在JavaScript语言中更加简单的实现异步编程。开发者们可以使用new Promise()来创建出一个Promise对象,它被用来接收一个执行器函数,该函数需要指定resolve和reject参数用于改变当前Promise对象的执行状态。

      由于Promise对象中执行器代码是属于同步任务,所以他会率先的进行执行,一个Promise对象会拥有以下几种状态:fulfilled状态:在任务完成时、使用resolve改变了任务状态;rejected状态:在任务失败时、使用reject改变了任务状态,或者在任务执行中抛出了异常;pending任务:正在等待时、或者是未使用resolve或reject改变任务状态。

      13094755-9743-4d09-8074-b71b3c6214ab-image.png

      1 Reply Last reply Reply Quote 0
      • First post
        Last post
      使用HTML构建办公软件 使用HTML构建办公软件 使用HTML构建办公软件
      红
      光
      A
      庆
      小
      U
      Y
      L
      I
      Z
      I
      Y
      C
      Z
      E
      Y
      U
      I
      A
      Z
      Y
      Y
      罗
      R
      大

      西南地区IT社群(QQ)
      云南
      【昆明网页设计交流吧】243627302
      【昆明nodejs交流吧】 243626749
      【VUE】838405306
      【云南程序员总群】343606807
      【昆明UI设计】104031254
      【云南软件外包】15547313
      贵州
      【PHP/java源码/站长交流群】55692114
      四川
      【成都Java/JavaWeb交流】86669225
      【vaScript+PHP+MySql】116270060
      【UI设计/设计交流学习群】135794928
      重庆
      【诺基亚 JAVA游戏博物馆】 559479780
      【PHP,Java,Python,C++接单】 442103442
      西藏
      社群
      昆明网页设计交流吧
      友情链接
      • Funtask
      • Funtask 社区
      • SUWIS
      ©2019-2021 滇ICP备20006698号