84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
上記のコードでは、結果が 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 あたりの内容が理解できると思います。