js 동기화 작업과 비동기화 작업의 실행 순서

1998 단어
먼저 오늘의 첫 번째 면접 문제를 풀고 식욕을 돋우다
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는 라인을 양보하고 뒤에 있는 함수를 계속 실행한다는 것을 나타낸다. (현재 함수 뒤에 있는 함수를 실행하는 것은 현재 함수 안에 있는 것이 아니다)
 
 

좋은 웹페이지 즐겨찾기