async/await, promise, set Timeout 면접 문제

1913 단어
제목:
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.
이상은 제가 이 코드의 집행 절차에 대한 견해입니다. 잘못된 부분이 있으면 여러분이 지적해 주셔서 감사합니다.

좋은 웹페이지 즐겨찾기