我无法理解以下代码是如何运行的。为什么“1”在“b”之后而“h”在“3”之后?顺序应该是:a, b, 1, 2, h, 3?一些文章说“事件循环队列”和“作业队列”之间的区别导致以下输出。但是如何?我已经阅读了ECMAScript 2015 - 8.4 Jobs and Job Queues的规范,想知道 Promise'job 是如何工作的,但这让我更加困惑。有人能帮我吗?谢谢!
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 的异步操作之后。为什么?