이 간단한 JS 비동기 인터뷰 질문에 답할 수 있습니까?

타격 질문을 참조하십시오.




const promise = new Promise((resolve, reject) => {
    console.log(1);
    resolve(5);
    console.log(2);
}).then(val => {
    console.log(val);
});

promise.then(() => {
    console.log(3);
});

console.log(4);

setTimeout(function () {
    console.log(6);
});


로그아웃 순서는?

기다리다.


기다리다..


기다리다...


좋아요.. 여기 있습니다 :)

--

대답:



See this gist for answer


설명:



우선 순위는 다음과 같다는 것만 기억하면 됩니다.
동기화 코드 -> 마이크로 작업 -> 매크로 작업

See this https://javascript.info/event-loop if you want to know why



우선, 동기 코드가 순서대로 실행되는 것은 무엇입니까?
1, 2, 4

새 Promise 블록 내부의 1과 2가 비동기 코드라고 생각하더라도 속지 마십시오. 이 두 console.log는 동기화 코드입니다.

새 Promise를 새로 만들 때 즉시 호출하고 확인 콜백(및 거부 콜백)만 비동기입니다.

둘째, mico 작업이 순서대로 실행되는 것은 무엇입니까? 5, 3

둘 다 약속 마이크로 작업이며 마이크로 작업에 속하는 것을 알고 있습니다.

마지막으로 매크로 작업은 무엇입니까? 6

그리고 그것은 명령입니다!

const promise = new Promise((resolve, reject) => {
    console.log(1);   // <-- sync code 1
    resolve(5);
    console.log(2);   // <-- sync code 2
}).then(val => {
    console.log(val); // <-- micro code 1, log 5
});

promise.then(() => {
    console.log(3);   // <-- micro code 2
});

console.log(4);       // <-- sync code 3

setTimeout(function () {
    console.log(6);   // <-- macro code
});


오늘은 여기까지 :)

좋은 웹페이지 즐겨찾기