이 간단한 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
});
오늘은 여기까지 :)
Reference
이 문제에 관하여(이 간단한 JS 비동기 인터뷰 질문에 답할 수 있습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/re4388/can-you-answer-this-simple-js-async-interview-question-2l1l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)