上記のコードでは、結果が 1,2 ではなく 2,1 になるのはなぜですか? setTimeout が最初にタスク キューに追加されるのではありませんか?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
具体的に言えば、setTimeout有一个4ms的最短时间,也就是说不管你设定多少,反正最少都要间隔4ms才运行里面的回调(当然,浏览器有没有遵守这个规范是另外一回事儿)。而Promiseの非同期にはこの問題はありません。
setTimeout
Promise
具体的な実装に関しては、2 つの非同期キューは異なります。Promise が配置されている非同期キューの方が優先されます。 詳細については、次の記事をご覧ください: Promise の JavaScript でのイベント ループ、タスク、マイクロタスクの確認
Promise的任务会在当前事件循环末尾中执行,而setTimeoutのタスクは次のイベントループで実行されます
読んでみると、「あなたの知らない JS (パート 2)」のセクション 1.5 あたりの内容が理解できると思います。
具体的に言えば、
setTimeout
有一个4ms的最短时间,也就是说不管你设定多少,反正最少都要间隔4ms才运行里面的回调(当然,浏览器有没有遵守这个规范是另外一回事儿)。而Promise
の非同期にはこの問題はありません。具体的な実装に関しては、2 つの非同期キューは異なります。
Promise
が配置されている非同期キューの方が優先されます。詳細については、次の記事をご覧ください: Promise の JavaScript でのイベント ループ、タスク、マイクロタスクの確認
Promise
的任务会在当前事件循环末尾中执行,而setTimeout
のタスクは次のイベントループで実行されます読んでみると、「あなたの知らない JS (パート 2)」のセクション 1.5 あたりの内容が理解できると思います。