async/await, promise, set Timeout 면접 문제
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')
답안(chrome 출력):
script start
async1 start
async2
promise1
script end
promise2
async1 end
settimeout
이것을 풀기 전에 우리는 몇 가지 지식점을 분명히 해야 한다. 1. js는 단선정이다.2,promise는 정의된 후 즉시 실행되지만, 그의resolve는 비동기적이다.3. promise의 비동기 우선 순위는 setTimeout보다 높다.4. async는promise 대상을 되돌려주고 await 키워드는 라인을 양보합니다.
다음은 우리가 분석한 코드 집행 절차: 1. 집행
console.log('script start')
, 출력script start
.2. setTimeout을 실행하면 비동기 동작으로 비동기 대기열에 넣는다.3. 실행async1()
, 출력async1 start
, 계속 아래로 실행;4. 실행async2()
, 출력async2
, 그리고 프로미스 대상을 되돌려줍니다. await는 라인을 양보하고 되돌아오는 프로미스를 비동기 대기열에 넣었기 때문에 async1()
아래의 코드도 위에서 완성된 후에 계속 실행해야 합니다.5. 실행new Promise
, 출력promise1
, 그리고 resolve
을 비동기 대기열에 넣는다.6. 실행console.log('script end')
, 출력script end
;7. 이 동기화 코드는 모두 실행되었습니다. 그리고 비동기 대기열로 가서 작업을 가져옵니다. 현재 대기열에promise(async2가 되돌아온),resolve(new Promise의),set Timeout을 꺼내서 promise
실행하고 기본 되돌아오기resolve
가 있습니다. 다시 비동기 대기열에 가입하면 대기열은resolve(new Promise의),resolve(async2가 되돌아온promise가 되돌아온),set Timeout이 됩니다.8. 그리고 실행resolve(new Promise )
, 출력promise2
.9. 다음으로 실행resolve(async2 promise )
, 출력async1 end
.10. 마지막 실행setTimeout
, 출력settimeout
.이상은 제가 이 코드의 집행 절차에 대한 견해입니다. 잘못된 부분이 있으면 여러분이 지적해 주셔서 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.