按理应该是a、b、1、2、h、3的顺序才对吧?有些文章说"事件循环队列"和"任务队列"之间的区别导致了这样的输出结果。但是为什么呢?我已经阅读了ECMAScript 2015 - 8.4 Jobs and Job Queues的规范,想要了解Promise的工作原理,但是越看越糊涂。我该如何解决这个问题呢?
var promise = new Promise(function(resolve, reject) {resolve(1)});
promise.then(function(resolve) {console.log(1)});
console.log('a');
promise.then(function(resolve) {console.log(2);});
setTimeout(function() {console.log('h')}, 0);
promise.then(function(resolve) {console.log(3)});
console.log('b');
// a
// b
// 1
// 2
// 3
// h
我知道Promise是异步的,但是setTimeout(..)异步操作的回调总是在Promise的异步操作之后。为什么呢?