>  Q&A  >  본문

javascript - promise 및 setTimeout의 실행 순서에 대한 혼동

으아악

위 코드의 결과가 1,2가 아닌 2,1인 이유는 무엇입니까?
작업 대기열에 setTimeout이 먼저 추가되어 있지 않나요?

高洛峰高洛峰2673일 전1135

모든 응답(3)나는 대답할 것이다

  • 黄舟

    黄舟2017-06-26 10:59:47

    구체적으로 말하면 setTimeout有一个4ms的最短时间,也就是说不管你设定多少,反正最少都要间隔4ms才运行里面的回调(当然,浏览器有没有遵守这个规范是另外一回事儿)。而Promise의 비동기식에는 이러한 문제가 없습니다.

    구체적인 구현 측면에서 두 비동기 대기열은 서로 다릅니다. Promise가 위치한 비동기 대기열의 우선순위가 더 높습니다.
    자세한 내용은 Promise의 JavaScript에서 이벤트 루프, 작업 및 마이크로태스크 살펴보기

    문서를 참조하세요.

    회신하다
    0
  • 某草草

    某草草2017-06-26 10:59:47

    Promise的任务会在当前事件循环末尾中执行,而setTimeout의 작업은 다음 이벤트 루프

    에서 실행됩니다.

    회신하다
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-26 10:59:47

    읽어보시면 "당신이 모르는 JS(2권)" 1.5절 정도 내용을 이해하실 수 있을 겁니다.

    회신하다
    0
  • 취소회신하다