위 코드의 결과가 1,2가 아닌 2,1인 이유는 무엇입니까? 작업 대기열에 setTimeout이 먼저 추가되어 있지 않나요?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
구체적으로 말하면 setTimeout有一个4ms的最短时间,也就是说不管你设定多少,反正最少都要间隔4ms才运行里面的回调(当然,浏览器有没有遵守这个规范是另外一回事儿)。而Promise의 비동기식에는 이러한 문제가 없습니다.
setTimeout
Promise
구체적인 구현 측면에서 두 비동기 대기열은 서로 다릅니다. Promise가 위치한 비동기 대기열의 우선순위가 더 높습니다. 자세한 내용은 Promise의 JavaScript에서 이벤트 루프, 작업 및 마이크로태스크 살펴보기
Promise的任务会在当前事件循环末尾中执行,而setTimeout의 작업은 다음 이벤트 루프
읽어보시면 "당신이 모르는 JS(2권)" 1.5절 정도 내용을 이해하실 수 있을 겁니다.
구체적으로 말하면
setTimeout
有一个4ms的最短时间,也就是说不管你设定多少,反正最少都要间隔4ms才运行里面的回调(当然,浏览器有没有遵守这个规范是另外一回事儿)。而Promise
의 비동기식에는 이러한 문제가 없습니다.구체적인 구현 측면에서 두 비동기 대기열은 서로 다릅니다.
문서를 참조하세요.Promise
가 위치한 비동기 대기열의 우선순위가 더 높습니다.자세한 내용은 Promise의 JavaScript에서 이벤트 루프, 작업 및 마이크로태스크 살펴보기
에서 실행됩니다.Promise
的任务会在当前事件循环末尾中执行,而setTimeout
의 작업은 다음 이벤트 루프읽어보시면 "당신이 모르는 JS(2권)" 1.5절 정도 내용을 이해하실 수 있을 겁니다.