js 동기화 작업과 비동기화 작업의 실행 순서
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start');
setTimeout(function() {
console.log('setTimeout');
}, 0)
async1();
new Promise(function(resolve) {
console.log('promise1');
resolve();
}).then(function() {
console.log('promise2');
});
console.log('script end');
/**
* scripr start
* async1 start
* async2
* promise1
* scroptend
* async1end
* promise2
* setimeout
*/
실행 결과는 네가 생각하는 것과 좀 다르지 않니?다음은 제가 자료를 찾아서 정리한 동기화 작업과 비동기화 작업의 집행 순서입니다.
1. 동기화든 비동기화든 js는 순서대로 실행합니다. 비동기적인 실행 결과를 기다리지 않을 뿐입니다. (이동기화된 것을 만나면 실행하지 않는 것을 빙빙 돌려서 하지 마십시오.
2. 동기화 작업은 우선순위의 구분이 없고 비동기적으로 우선 순위가 있습니다. 마이크로 작업(microtask 대기열)을 먼저 실행하고 매크로 작업(macrotask 대기열)을 실행합니다. 같은 단계는 순서대로 실행합니다.
마이크로퀘스트:`process.nextTick` ,`promise` ,`MutationObserver`
매크로 작업: `script`, `setTimeout`, `setInterval`, `setImmediate`, `I/O`, `UI rendering`
3. await는 라인을 양보하고 뒤에 있는 함수를 계속 실행한다는 것을 나타낸다. (현재 함수 뒤에 있는 함수를 실행하는 것은 현재 함수 안에 있는 것이 아니다)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.