js--->setTimeout和Promise的执行顺序


setTimeout(function() {
console.log(1)
}, 0);
new Promise(function(resolve, reject) {
console.log(2)
for (var i = 0; i < 10000; i++) {
if(i === 10) {console.log(10)}
i == 9999 && resolve();
}
console.log(3)
}).then(function() {
console.log(4)
})
console.log(5);

输出答案:2 10  3 5 4 1

  1. 要先弄清楚settimeout(fun,0)何时执行,promise何时执行,then何时执行
  2. settimeout这种异步操作的回调,只有主线程中没有执行任何同步代码的前提下,才会执行异步回调,而settimeout(fun,0)表示立刻执行,也就是用来改变任务的执行顺序,要求浏览器尽可能快的进行回调
  3. promise何时执行,由上图可知promise新建后立即执行,所以promise构造函数里代码同步执行的,
  4. then方法指向的回调将在当前脚本所有同步任务执行完成后执行,
  5. 那么then为什么比settimeout执行的早呢,因为settimeout(fun,0)不是真的立即执行,
  6. 经过测试得出结论:执行顺序为:同步执行的代码-》promise.then->settimeout


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM