美文网首页前端知识点
同步、异步、回调执行顺序

同步、异步、回调执行顺序

作者: AMONTOP | 来源:发表于2019-01-11 16:29 被阅读63次

看下面例子判断输出的值

let a = new Promise(  
  function(resolve, reject) {  
    console.log(1)  
    setTimeout(() => console.log(2), 0)  
    console.log(3)  
    console.log(4)  
    resolve(true)  
  }  
)  
a.then(v => {  
  console.log(8)  
})  
  
let b = new Promise(  
  function() {  
    console.log(5)  
    setTimeout(() => console.log(6), 0)  
  }  
)  
  
console.log(7)  

在看正确结果之前,我先进行分析题目(同步 => 异步 => 回调):

  • 1).看同步代码:a变量是一个Promise,一开始大家都会以为Promise不是异步吗?不不,其实Promise是异步的,是指他的then()和catch()方法,Promise本身还是同步的,所以这里先执行a变量内部的Promise同步代码。(同步优先)
   console.log(1)
   setTimeout(() => console.log(2), 0) //回调
   console.log(3)
   console.log(4)
  • 2).Promise内部有4个console,第二个是一个setTimeout回调(回调垫底,所以暂时不输出)。所以这里先输出1,3,4,回调的方法丢到消息队列中排队等着。
  • 3)接着执行resolve(true),进入then(),then是异步,下面还有同步没执行完呢,所以then也去消息队列排队等候。(异步靠边)
  • 4)b变量也是一个Promise,和a一样,同样是同步的,执行内部的同步代码,输出5,setTimeout是回调,去消息队列排队等候,这里输出5。
  • 5)最下面同步输出7。
  • 6)现在同步的代码执行完了,JavaScript就跑去消息队列呼叫异步的代码:异步,出来执行了。这里只有一个异步then,所以输出8。
  • 7)此时,异步也over,轮到回调函数:回调,出来执行了。这里有2个回调在排队,他们的时间都设置为0,所以不受时间影响,只跟排队先后顺序有关。则先输出a里面的回调2,最后输出b里面的回调6。
  • 8)最终输出结果就是:1、3、4、5、7、8、2、6。

相关文章

  • 04-Node 异步编程

    Node 异步编程同步方法和异步方法异步 API 的执行顺序异步编程回调地狱问题Promise 改造回调地狱代码a...

  • nodejs--day4笔记

    1. 同步与异步API 回调函数 通过回调函数返回异步API的值 代码执行顺序 2. promise 解决回调...

  • 同步、异步、回调执行顺序

    看下面例子判断输出的值 在看正确结果之前,我先进行分析题目(同步 => 异步 => 回调): 1).看同步代码:a...

  • 同步、异步、回调执行顺序

  • JS同步回调和异步回调

    同步回调函数 按照正常顺序执行 输出为: 异步回调函数 setTimeout将回调函数放在下一个任务队列执行 输出为

  • 非阻塞和阻塞

    ### 同步 任务的执行顺序和程序的执行顺序一致,所以是同步的。 ### 异步 每一个任务都有一个或多个回调函数,...

  • 回调函数callback

    异步 和 同步 同步:按照顺序,完成一个再进行下一个。 异步:不等这个执行完就能执行下一个。 回调函数 callb...

  • 前端入门11 -- JavaScript之Promise

    回调函数 回调函数分为两种类型,分别为同步回调与异步回调; 同步回调:会立即执行,完全执行完了才结束,不会放入回调...

  • for循环中嵌套setTimeout,执行顺序和结果的理解

    同步优先、异步靠边、回调垫底!公式表达:同步 => 异步 => 回调 JS是单线程环境,也就是说代码的执行是 同步...

  • Retrofit要点

    接口 GET POST DOWNLOAD 回调 单个 顺序执行 异步并行

网友评论

    本文标题:同步、异步、回调执行顺序

    本文链接:https://www.haomeiwen.com/subject/xxwxdqtx.html