보통 UI에 이벤트 핸들러 걸어놓는거는 당연히 비동기니까 비동기라 생각했는데 지금 테스트해보니 동기적으로 콘솔에 찍히네... 찾아보니 dispatchEvent같은건 동기로 명확하게 동작한다고 되어있는데.. 그럼 저 케이스면 동기가 일반적인 케이스고 비동기가 특수 케이스인것같은데.. 그럼 기존에 비동기 이벤트 핸들러들은 특수처리가 되어있는건가?
[%] JS 이벤트 발생과 listen은 비동기로 처리되는게 아니었구나..?
익명(180.71)
2022-02-28 13:21
추천 0
댓글 16
다른 게시글
-
배열대신 맵을 써라 [9][%] 익명(125.129) | 22.02.28추천 0
-
배열 크기 자동으로 늘려주고 줄여주는 그런거 없음? [10][질문] 익명(117.111) | 22.02.28추천 0
-
님덜님덜 노드 passport 초거수잇음?? [10][%] 익명(59.14) | 22.02.28추천 0
-
개발 재미없어서 PS만 쳐하다 회사 왔는데 [6][%] 익명(223.62) | 22.02.28추천 1
-
러스트 파서는 머로 만듬? [2][%] 익명(87.145) | 22.02.28추천 0
-
로그인구현할때 크롬에서 경고창나오는데 이거머임;;? [5][%] 익명(59.14) | 22.02.28추천 0
-
PS할때 언어 뭘로함? [9][%] 익명(121.134) | 22.02.28추천 0
-
너네 파이썬 재귀깊이 제한 얼마로 설정함? [13][%] 익명(115.21) | 22.02.27추천 0
-
컴공 시스템 프로그래밍 과목은 보통 뭐 배움? [2][%] 익명(223.39) | 22.02.27추천 0
-
Immutable에 대한 오해 [12][%] 익명(211.184) | 22.02.27추천 0
Unlike "native" events, which are fired by the browser and invoke event handlers asynchronously via the event loop, dispatchEvent() invokes event handlers synchronously. All applicable event handlers are called and return before dispatchEvent() returns.
이런 문구를 발견하였습니다. 만약 비동기로 이벤트 핸들러가 있다면 비동기 함수에다가 한번 wrapping했다고 생각하면 되겠네요.
코드를 어떻게 짰음
addListener('hey', function () { console.log('async?') } ); while(1) { console.log(console.log('start'); trigger('hey') }
결과 -> start,hey,start,hey,start,hey
while(1) { console.log('start'); settimeout(() => { console.log('async?')); } 결과 -> start start start start start....
나는 당연히 trigger -> addListener 이런게 이벤트루프를 타서 들어갈 줄 알았는데.. 아니었다라는 점~
ui를 통해서 입력되는것도 아니고 타이머도 아니라 루프를 안탈듯
그래서 여기서의 이벤트 호출의 개념은 단순히 method 호출 매커니즘과 다른게 없구나.. 라는걸 깨달았다.
ㅇㅇ 나는 당연히 루프를 탈줄알았음. 저런 이벤트형태는...
node쪽 api들은 이런 경우에도 비동기인것 처럼 보이려고 nextTick 타게 해둔것도 있긴한데
아 그런쪽은 nextTick으로 wrapping해두었구나..
근데 nextTick은 이벤트 루프는 또 아니라서 애매함
어쨋든 실행을 defer할 수 있는 매커니즘이니.. 나는 defer여부가 궁금했던거인듯.. 어떤 코드를 실행했을때 defer였으면 결과가 non-deterministic한데.. 항상 determistic하게 나와서 신기했거등
이벤트 루프를 타더라도 non determistic은 또 아님 동작방식 정확히 이해하고 있으면 프로미스 이런거 섞여있는 코드도 어느정도 예상할 수 있음 - dc App
이벤트 루프를 타기보다는 실행이 쓰레드에 의해 비동기로 실행할 경우 non-deterministic이라고 생각.