setTimeout과 Promise 분석
var p1 = new Promise(function(resolve, reject){
resolve(1);
})
setTimeout(function(){
console.log("will be executed at the top of the next Event Loop");
},0)
p1.then(function(value){
console.log("p1 fulfilled");
})
setTimeout(function(){
console.log("will be executed at the bottom of the next Event Loop");
},0)
이전 코드의 출력 순서는 어떻습니까?이 문제도 본문 창작의 원천이다. 그 답은 다음과 같다.
p1 fulfilled
will be executed at the top of the next Event Loop
will be executed at the bottom of the next Event Loop
비동기식 작업
JavaScript 이벤트 순환 병발 모델을 돌이켜보면 setTimeout과 Promise가 호출하는 것은 모두 비동기적인 작업이라는 점을 알 수 있다. 이것은 모두 작업 대기열을 통해 관리/스케줄링을 하는 공통점이다.그럼 얘네는 뭐가 달라요?다음 글은 계속 소개하겠습니다.
작업 대기열
앞에서 임무 대기열의 기초 내용과 메커니즘을 소개했고 보기를 선택할 수 있으며 본고는 임무 대기열을 확대하고 소개한다.JavaScript는 작업 대기열을 통해 모든 비동기식 작업을 관리하며, 작업 대기열은 MacroTask Queue와 MicoTask Queue 두 종류로 나눌 수 있습니다.
MacroTask Queue
MacroTask Queue(매크로 작업 대기열)는 주로 setTimeout, setInterval, setImmediate, requestAnimationFrame, NodeJS의'I/O 등을 포함한다.
MicroTask Queue
MicroTask Queue(미 작업 대기열)는 다음과 같은 두 가지 유형으로 구성됩니다.
독립 리셋 microTask: 예를 들어 Promise의 성공/실패 리셋 함수는 서로 독립적이다.복합 리셋 microTask: 예를 들어 Object.observe, MutationObserver, NodeJs의 프로세스.nextTick, 서로 다른 상태가 같은 함수체에 리셋됩니다.
MacroTask 및 MicroTask
JavaScript는 비동기식 작업을 MacroTask와 MicroTask로 구분하는데, 그 차이점은 무엇입니까?
실행이 끝날 때까지 동기화 코드를 순서대로 실행합니다.acroTask 대기열을 검사하고 트리거된 비동기 작업이 있으면 첫 번째를 취하고 이벤트 처리 함수를 호출한 다음 세 번째 단계로 이동하고 처리할 비동기 작업이 없으면 세 번째 단계로 이동합니다.MicroTask 대기열을 검사한 후 트리거된 모든 비동기 작업을 실행하고 이벤트 처리 함수를 순서대로 실행하며 실행이 끝날 때까지 두 번째 단계로 이동합니다. 처리할 비동기 작업이 없으면 두 번째 단계로 돌아가 후속 절차를 순서대로 수행합니다.마지막으로 두 번째 단계로 돌아가서 MacroTask 대기열을 계속 검사하고 다음 절차를 순서대로 수행한다.이렇게 왕복하면 모든 비동기 임무 처리가 완성되면 끝난다.
링크:https://juejin.im/post/5b7057b251882561381e69bf
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.