당신에게 결코 필요 "동기 동작"; 대신 개발자 (개발자)는 자바 스크립트의 비동기 성질 인 –을 익히고 익명 콜백을 사용하고 클로저를 처리하는 방법에 대해 머리를 감싸 주면됩니다. 예를 들어
, 당신은이 일을하는 경우 :
function doSomething(arg) {
var number = arg + 10; // for example
var data = getDetail();
data = JSON.parse(data);
element.innerHTML = number + ': ' + data.name;
}
function getDetail() {
var xhReq = new XMLHttpRequest();
xhReq.open("POST", "ClientService.svc/REST/GetDetail", false); // bad!
xhReq.send(null);
return xhReq.responseText;
}
는 비동기 적으로 기록 될 수있다 : 비동기 예
function doSomething(arg) {
var number = arg + 10;
getDetail(function(data) {
data = JSON.parse(data);
element.innerHTML = number + ': ' + data.name;
});
}
function getDetail(cb) {
var xhReq = new XMLHttpRequest();
xhReq.open("POST", "ClientService.svc/REST/GetDetail", true);
xhReq.onreadystatechange = function() {
if (xhReq.readyState == 4) cb(xhReq.responseText);
}
xhReq.send(null);
}
공지만이 후에 실행 당신의 내면의 콜백 함수 (네트워크 요청이 완료 됨) 외부 변수의 number
변수에 계속 액세스 할 수 있습니다. 이는 JavaScript가 정적 범위 –을 가지므로 다른 말로하면, 함수를 선언하면 해당 함수를 둘러싼 함수의 변수에 영구적으로 액세스 할 수 있기 때문입니다.
배경을 더 제공 할 수 있습니까? 네가 묻는 질문에 나는 명확하지 않다. xhr 열기 함수의 세 번째 매개 변수는 요청이 동기화 또는 비동기 모드로로드되도록 지시합니다. – Joel
@Joel : 이것은 [이 질문] (http://stackoverflow.com/q/12679244/201952)에 대한 대답으로 시작되었습니다. 여기서 동기식 XHR을 사용하는 것이 좋지 않다고 지적했습니다. 그는 코드를 비동기로 다시 작성하는 방법을 묻습니다. – josh3736