setTimeout(function () {
console.log(1)
}, 0);
new Promise(function executor(resolve) {
resolve();
}).then(function () {
console.log(2);
});
Untuk kod di atas, kenapa keputusan 2,1 bukannya 1,2?
Bukankah setTimeout ditambahkan pada baris gilir tugas dahulu?
Secara khusus, asynchronous
setTimeout
有一个4ms的最短时间,也就是说不管你设定多少,反正最少都要间隔4ms才运行里面的回调(当然,浏览器有没有遵守这个规范是另外一回事儿)。而Promise
tidak mempunyai masalah ini.Dari segi pelaksanaan khusus, dua baris gilir tak segerak adalah berbeza Barisan gilir tak segerak di mana
Promise
terletak mempunyai keutamaan yang lebih tinggi.Untuk butiran, anda boleh membaca artikel ini: Melihat Gelung Acara, Tugasan dan Tugasan Mikro dalam JavaScript daripada Promise
Tugasan dalam
Promise
的任务会在当前事件循环末尾中执行,而setTimeout
dilaksanakan dalam gelung acara seterusnyaSaya cadangkan anda membacanya, dan kemudian anda akan memahami kandungan di sekitar bahagian 1.5 "JS Anda Tidak Tahu (Jilid 2)".