자바 스크립트의 setTimeout 함수로 인해 자바 스크립트에 대해 잘 아는 부분을 다시 평가하게되었습니다. 오늘 아침 일찍 나는이 같은 for 루프로 실행 : 내가 할 수있는이 코드를 기대했던JS의 setTimeout을 통한 스레딩/동시성 이해
for (i = 0; i < length; i++) {
setTimeout(executeOtherCode, 5000)
}
5 초 동안 executeOtherCode 기능, "잠"을 실행하고 다음 반복을 계속했다. 대신에 나는 executeOtherCode를 사용하여 동시에 길이를 실행했습니다.
제 생각에 setTimeout은 비동기 함수 호출입니다. 이 올바른지? 그러나 정규 함수를 실행하려면 1 분 걸리는 hugeFunction()을 호출 해 보겠습니다. 다음 함수는 함수가 반환 할 때까지 실행되지 않습니다. 맞습니까? 그렇다면 왜 다른 두 가지가 있습니까? 언어 디자인 선택에 불과합니까?
jQuery에서 getJSON과 같이 비동기 적으로 동작하는 다른 기능을 보아 왔습니다. 어떤 함수가 비동기식으로 정의 되었는가를 아는 것입니까, 아니면 그것을 식별 할 수있는 패턴이 있습니까? 그렇다면, 무엇?
일반적으로 비동기 함수는 네트워크 또는 일종의 I/O 연산 (예 : HTML5의 새로운 IndexedDB 및 WebWorkers 기능의 일부 메소드)을 통해 데이터를 검색하는 것을 처리하는 함수입니다. 그 이외에는 식별 할 수있는 실제적인 일관된 방법이 없습니다. 당신은 당신이 사용하고있는 라이브러리에 대한 문서를보아야 만합니다. –
_ "내가 얻은 것은 executeOtherCode와 동시에"_ - 아니야. 이 코드는'executeOtherCode()'가 5000ms 후에'length' 번 호출되도록 대기하며 그 동안 현재 블록이 계속됩니다. 각각의 타임 아웃은 가능한 한 나중에 5000ms 가까이 실행하지만 다른 JS는 이미 실행 중입니다. _ 때문에 각 스레드가 동시에 실행되지 않고 멀티 스레드되지 않습니다. 그것은 각자 사이에 눈에 띄는 지연이 없었기 때문에 동시 발생했습니다. – nnnnnn