programing

Ajax와 같은 비동기 호출을 호출하는 동안 코드를 대기시키는 방법

javaba 2023. 9. 6. 22:40
반응형

Ajax와 같은 비동기 호출을 호출하는 동안 코드를 대기시키는 방법

저는 이런 것을 찾고 있습니다.

function someFunc() {

callAjaxfunc(); //may have multiple ajax calls in this function
someWait(); // some code which waits until async calls complete
console.log('Pass2');

}

function callAjaxfunc() {
  //All ajax calls called here
  console.log('Pass1');

}

내가 시도한 것?

쥬리 1개.()

사용해보았습니다.잘 작동합니다.하지만 내가 원하는 방식은 아닙니다.$.when기다리겠지만 코드는 옆에 있습니다.$.when()대기하지 않고 실행합니다.안에 있는 코드do callbackajax 호출 후에만 실행

2.전역 플래그가 있는 setTimeOut()

저는 이게 잘 될 거라고 확신했습니다.저는 따라 해봤습니다.

GlobalFlag = false;

function someFunc()     
    callAjaxfunc(); //may have multiple ajax calls in this function
    setTimeOut(waitFunc, 100); // some  which waits until async calls complete
    console.log('Pass2');
}

function callAjaxfunc() {
    //All ajax calls called here
    onAjaxSuccess: function() {
        GlobalFlag = true;
    };
    console.log('Pass1');    
}

function waitFunc() {
    if (!GlobalFlag) {
        setTimeOut(waitFunc, 100);
    }
}​

여전히 원하는 결과를 얻을 수 없습니다.제가 여기서 뭔가 잘못하고 있나요?이런 방법이 아니라고요?

내가 원했던 결과는 이렇게 와야 합니다.

Pass1
Pass2

AJAX 호출이 필요하기 때문에 어떤 fidle도 할 수 없습니다.

편집: 많은 사람들이 콜백을 제안했습니다.나는 그들에 대해 알고 있습니다.하지만 여전히 옆에 있는 암호는somewait()처형될 겁니다브라우저가 다음 코드 실행을 완전히 중지하기를 원합니다.somewait()아약스가 호출할 때까지..또한 나쁜 관행일 수도 있지만 가능하다면 알고 노력할 가치가 있습니다.

콜백을 사용합니다.이런 것은 당신의 샘플 코드에 따라 작동할 것입니다.

function someFunc() {

callAjaxfunc(function() {
    console.log('Pass2');
});

}

function callAjaxfunc(callback) {
    //All ajax calls called here
    onAjaxSuccess: function() {
        callback();
    };
    console.log('Pass1');    
}

인쇄됩니다.Pass1즉시(즉시 ajax 요청은 최소 몇 마이크로초가 소요됨), 인쇄Pass2그 때에onAjaxSuccess실행됩니다.

왜 당신이 사용하는 데 효과가 없었습니까?내가 뭔가 오해하지 않는 한 당신에게 이 일이 효과가 있을지도 모릅니다.

/* AJAX success handler */
var echo = function() {
    console.log('Pass1');
};

var pass = function() {
  $.when(
    /* AJAX requests */
    $.post("/echo/json/", { delay: 1 }, echo),
    $.post("/echo/json/", { delay: 2 }, echo),
    $.post("/echo/json/", { delay: 3 }, echo)
  ).then(function() {
    /* Run after all AJAX */
    console.log('Pass2');
  });
};​

여기서 보세요.


갱신하다

입력 내용에 따라 동기화 요청을 사용하는 것이 가장 빠른 대안인 것 같습니다.속성을 다음으로 설정할 수 있습니다.false당신의$.ajax차단해달라는 요청.이렇게 하면 요청이 완료될 때까지 브라우저가 정지됩니다.

이 방법을 권장하지는 않지만 이벤트 기반 워크플로우에서 코드를 수정하여 코드에 의존하지 않도록 해야 한다고 생각합니다.

진짜 프로그래머들은 세마포를 가지고 그것을 합니다.

변수를 다음으로 설정합니다.0. 각 AJAX 호출 전에 증분합니다.각 성공 처리기에서 감소시키고, 다음에 대해 테스트합니다.0. 만약 그렇다면, 당신은 끝입니다.

아약스 통화가 완료될 때까지 기다려야 한다면 동기화만 하면 됩니다.

언급URL : https://stackoverflow.com/questions/14031421/how-to-make-code-wait-while-calling-asynchronous-calls-like-ajax

반응형