2012-07-02 2 views
1

우리는 C#의 WatiN을 사용하여 브라우저 (현재 IE 만)와 상호 작용할 수 있습니다.IE가 2 개의 JavaScript 함수를 동시에 실행할 수 있습니까

일부 WatiN의 메서드는 특정 웹 요소에 "onchanged()"및 "onclick()"을 보내는 간단한 래퍼입니다.

WatiN은 기본적으로 비 차단 버전 인 fire-and-forget 버전을 제공합니다.

내 질문은 브라우저가 2 개의 JS 기능을 동시에 실행합니까?

// Uses FireEventAsync("onchanged") 
SelectList.SelectNoWait() 

SelectList.FireEventAsync("onclick") 

모두 JS 기능은 온 클릭하고 한 번에 실행할 수는 onChanged 수 :

예를 들어, 다음 코드를 가정?

나는 우리가 다른 이벤트를 발생시키는 동안 onchanged() 함수가 여전히 실행중인 비슷한 문제가 발생했다고 믿습니다. 기술적으로 가능한지 궁금합니다.

+1

브라우저에 따라 달라질 수 있습니다. – Jodrell

+1

Javascript exectuing은 이벤트 중심이므로'onclick' 및'onchange' 브라우저를 실행하면 브라우저가 실행 대기열에 핸들러를 추가하기 만합니다. 그들은 순차적으로 실행됩니다. 귀하의 질문이 "동시에 사건에 대해 발사 할 수 있습니까?"라는 대답은 확실합니다. 그러나 나는 그들이 처형 된 순서가 보장되지 않는다고 생각한다. – J0HN

+0

내 질문이 브라우저 유형 (IE)으로 업데이트되었습니다. –

답변

1

간단히 : 아니요. JavaScript 실행은 단일 스레드입니다.

그러나 비동기 작업 (Ajax, 타이머, 작업자 등)을 사용하면 함수의 일부가 나중에 스레드가 비어있을 때 실행되도록 설정할 수 있습니다.

인위적인 예는 다음과 같습니다

function foo() { 
    setTimeout(function() { 
     console.log('three'); 
    }, 10); 

    console.log('one'); 
} 

function bar() { 
    console.log('two'); 
} 

foo(); 
bar(); 

foobar하지만 기적이라고하고 로그가 three, one, two의 순서로 작성, 타이머의 로그를 지연하므로 그들은 one, two, three의 순서로 실행됩니다 'three' 나중에 사용하십시오.

핸들러에서 비동기를 사용하지 않는 경우에도 SelectNoWaitFireEventAsync 일 가능성이 있습니다.

+0

감사. FireEventAsync 구현을 점검 할 것입니다. 즉, 이상한 행동을 유발할 수있는 잠재적 경쟁 조건이있을 수 있습니다. –

2

아니요, 특별히 webworkers을 사용하지 않는 한 동시에 여러 번 실행할 수 없습니다. 하나의 사용자 스레드 만 브라우저 컨텍스트에서 활성화 될 수 있습니다.

일반적으로 이벤트에서 호출되는 작은 함수 만 실행합니다. 대부분의 긴 태스크는 리소스 및 비동기와 관련이 있습니다.

"이벤트 기반"이라고 생각하고 (가장 중요하게) 자연스럽게 비동기식 동기식 호출을 시도하지 않으면 (나는 AJAX에 대해 생각합니다) 아무런 문제가 없습니다.

+0

우리가 겪고있는 것이 "경쟁 조건"처럼 보이고 꽤 무작위적인 것처럼 수치 스럽습니다. 나는 나의 이론이 그것을 설명 할 수 있다고 생각했다. –

관련 문제