javascript – Verwirrung über die Ausführungsreihenfolge von Promise und SetTimeout
高洛峰
高洛峰 2017-06-26 10:57:47
0
3
1125
setTimeout(function () {
    console.log(1)
}, 0);
new Promise(function executor(resolve) {
        resolve();
}).then(function () {
    console.log(2);
});

Warum ist das Ergebnis für den obigen Code 2,1 statt 1,2?
Wird setTimeout nicht zuerst zur Aufgabenwarteschlange hinzugefügt?

高洛峰
高洛峰

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

Antworte allen(3)
黄舟

从规范上来讲,setTimeout有一个4ms的最短时间,也就是说不管你设定多少,反正最少都要间隔4ms才运行里面的回调(当然,浏览器有没有遵守这个规范是另外一回事儿)。而Promise的异步没有这个问题。

从具体实现上来说,这俩的异步队列不一样,Promise所在的那个异步队列优先级要高一些。
具体的你可以看这篇文章:从Promise来看JavaScript中的Event Loop、Tasks和Microtasks

某草草

Promise的任务会在当前事件循环末尾中执行,而setTimeout中的任务是在下一次事件循环执行

淡淡烟草味

建议你去看下,<<你不知道的js(中卷)>>中1.5节左右的内容,就理解了~我之前就是看了这个理解的。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!