2017-05-22 13 views
0

오래 전에 비동기 프로그래밍이 Javascript에서 보편화되어 왔기 때문에 window.setTimeout에 대한 호출 횟수는 나에게 매우 해킹 된 것처럼 보입니다. VM이 작동하는 방식과 이벤트 루프가 작동하는 방식을 이해합니다. 요점은, 누구든지 ecma 제작자가 논리 블록을 나중에 실행하도록 강제하는 일종의 "nextEventLoop"또는 "defer"호출을 추가하지 않는 이유에 대해 알고 있습니까?JS 네이티브 NextEventLoop

작성자가 타임 아웃을 0으로 설정하지 않으므로 setTimeout (0)이 표시 될 때마다 혼탁합니다. 그렇다면 왜 계속해서 우리에게 해킹을 강요합니까?

또는 더 좋은 대안이 있습니까?

답변

1

ES6의 경우, Promise.resolve().then(() => { ... })은 사용자가 많이 묻는 것을 수행하며, 여전히 ES5 인 대부분의 환경에서 Promise 폴리 필을 사용할 수 있습니다. 대부분의 polyfills는 가능하면 더 빠른 옵션을 선호하여 setTimeout을 피합니다.

+0

그래,이게 내가 말하는거야. 이것은 나에게 setTimeout과 훨씬 더 장황하지 않다. 효과적으로 이것은 연기를 명시 적으로 나타내지 않는 언어의 기능을 사용합니다. "hey JS,이 작업을 현재 큐 이후에 연기"라는 목표를 달성하기 위해 비동기 의미론의 _면 효과를 사용합니다. 말이 돼? 나는 당신의 답을 고맙게 여긴다.하지만 말하자면, 고양이를 피부에 대는 또 다른 방법 일 뿐이다. – dudewad

+0

당신의 관점에 달려 있다고 생각합니다. 'setTimeout'은 ES 사양의 일부조차도 아니며, HTML의 일부이며 Node에 복사됩니다. 'Promise'는 사용자가 볼 수있는, 이벤트 루프의 다음 차례에 물건을 대기열에 넣는 유일한 방법입니다. – loganfsmyth