javascript - Kekeliruan tentang perintah pelaksanaan janji dan setTimeout
高洛峰
高洛峰 2017-06-26 10:57:47
0
3
1163
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?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(3)
黄舟

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 seterusnya

淡淡烟草味

Saya cadangkan anda membacanya, dan kemudian anda akan memahami kandungan di sekitar bahagian 1.5 "JS Anda Tidak Tahu (Jilid 2)".

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan