次のコードがどのように実行されるのか理解できません。なぜ「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 の非同期操作の後になります。なんで?