아약스의 비동기적 특성을 처리하기 위한 아토믹 자바스크립트 작업이 있습니까?
서버에서 동적으로 코드(함수)를 로드하여 자바스크립트 코드로 실행한 후 배열에 저장하여 실행하고 있습니다.이 코드의 모든 스니펫은 정확히 한 번 실행되어야 합니다.psuedocode는 다음과 같습니다.
function fetch(foo){
if (foo in fooArray){
//Do Nothing
else{
//Fetch foo via Ajax and execute foo()
}
}
문제는 훨씬 더 복잡하지만 근본적으로 아래 명령을 실행하면
fetch('someFunctionName');
fetch('someFunctionName');
fetch('someFunctionName');
fetch('someFunctionName');
네 명 모두가 실행할 것입니다.if (foo in fooArray)그리고 그것이 배열에 없다고 가정하고, 네 개 모두가 코드를 가져와서 실행할 것입니다.저는 옛날에 세마포어와 뮤텍스에 대해 배운 것을 기억합니다. 자바스크립트에는 그런 것들이 있습니다.
JavaScript는 비동기 콜백, 시간 초과, 간격 및 사용자 이벤트와 잘 작동하지만 동시성 문제는 없습니다.이것은 JavaScript가 기본적으로 단일 스레드이기 때문에 가능합니다. 주어진 코드 조각은 항상 원자적으로 실행되고 JavaScript를 실행하는 다른 스레드에 의해 중단되지 않습니다.
당신의.fetch()기능은 항상 중단 없이 실행됩니다.AJAX 콜백의 일부로 실행되고 여러 AJAX 콜백이 보류 중인 경우 대기열에 포함됩니다.
다른 예: 입력 요소에 이벤트 핸들러가 할당되어 있고 이벤트를 한 번에 여러 번 실행하면 이벤트 핸들러가 동시에 실행되지 않습니다.대신 대기열에 대기하고 순차적으로 실행됩니다.이는 에 의해 트리거된 여러 이벤트에도 적용됩니다.setTimeout()/setInterval().
참고로, 이것이 node.js가 강력한 이유 중 하나입니다. 단일 스레드만 사용하고 I/O에서 차단하지 않으며 데이터 준비/이벤트가 발생할 때 콜백을 대신 사용합니다.
Javascript는 기본적으로 싱글 스레드이므로 뮤텍스가 필요하지 않습니다.fetch는 플래그를 설정하여 다음 fetch 호출이 다음과 같은 Ajax 호출을 수행하지 않도록 할 수 있습니다.
var beingFetched = {};//map onflight -> callbacks
function fetch(foo){
if (foo in fooArray){
//Do Nothing
} else {
if (beingFetched.foo) { //note empty array is truthy
//register a callback
var callback = function(r){
//anything you need to do wit the return object r
//maybe even eval it.
};
//the callback would more likely be an argument to fetch itself
//or you could use a promise API instead so that you can at your will
//register multiple callbacks - for error, for success etc.
beingFetched.foo.push(callback);
} else {
beingFetched.foo = [];//truthy
//Fetch foo via Ajax and execute
$.ajax("getFoo/"+foo).done(function() {
_.each(beingFetched.foo, function(cb){
cb.apply(cb,arguments);
});
delete beingFetched.foo;
});
}
}
}
언급URL : https://stackoverflow.com/questions/7266918/are-there-any-atomic-javascript-operations-to-deal-with-ajaxs-asynchronous-natu
'programing' 카테고리의 다른 글
| 위조 방지 기능이 있습니까?ASP의 토큰입니다.NET MVC는 모든 CSRF 공격을 방지합니까? (0) | 2023.09.01 |
|---|---|
| j쿼리 AND 및 OR 연산자를 사용하여 속성별로 선택 (0) | 2023.09.01 |
| 유효성 검사를 통해 양식을 여러 구성요소로 분할 (0) | 2023.09.01 |
| Swift UI - 목록 행의 여러 버튼 (0) | 2023.09.01 |
| iframe 내에서 상위 창 다시 로드 (0) | 2023.09.01 |