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에 따라 라이센스가 부여됩니다.