>  기사  >  웹 프론트엔드  >  Promises를 사용하여 jQuery에서 세 개의 비동기 호출을 어떻게 연결하고 한 호출에서 다음 호출로 데이터를 전달할 수 있습니까?

Promises를 사용하여 jQuery에서 세 개의 비동기 호출을 어떻게 연결하고 한 호출에서 다음 호출로 데이터를 전달할 수 있습니까?

DDD
DDD원래의
2024-11-01 13:56:29152검색

How can you chain three asynchronous calls in jQuery using Promises, passing data from one call to the next?

jQuery Promise로 세 개의 비동기 호출 연결

이 질문에서는 세 개의 비동기 HTTP 요청이 있는 시나리오를 탐색합니다. 동기 방식이며 한 호출에서 다음 호출로 데이터를 전달해야 합니다.

초기 접근 방식:

질문에서 언급했듯이 처음 두 가지 기능. 이것은 좋은 시작이었지만 두 가지 기능의 경우만 다루었습니다. 세 가지 기능으로 확장하려면 약간 다른 접근 방식이 필요합니다.

JqXHR 개체 연결:

여러 비동기 호출을 연결하는 핵심은 $에서 반환된 jqXHR 개체를 반환하는 것입니다. .ajax() 각 함수에 있습니다. 이러한 객체는 Promise와 호환되며 .then()/.done()/.fail()/.always()를 사용하여 연결할 수 있습니다.

업데이트된 코드:

function first() {
   return $.ajax(...);
}

function second(data, textStatus, jqXHR) {
   return $.ajax(...);
}

function third(data, textStatus, jqXHR) {
   return $.ajax(...);
}

function main() {
    first().then(second).then(third);
}

이 업데이트된 코드에서 first() 함수는 AJAX 호출에서 jqXHR 객체를 반환한 다음 second() 함수에 인수로 전달됩니다. 그러면 second() 함수는 third() 함수에 전달되는 jqXHR 객체를 반환합니다.

함수 간 데이터 전달:

인수 데이터 , textStatus 및 jqXHR은 이전 함수의 $.ajax() 호출에서 발생합니다. 즉, first()는 second()에 피드를 제공하고 second()는 third()에 피드를 제공합니다. 따라서 이러한 인수를 사용하여 한 함수에서 다음 함수로 데이터를 전달할 수 있습니다.

데모:

아래 코드는 jQuery Promise를 사용하여 세 가지 비동기 호출을 연결하는 방법을 보여줍니다. . $.ajax(...) 대신 $.when('foo')을 사용하여 이행된 약속을 전달합니다.

function first() {
   return $.when('foo');
}

function second(data) {
   return $.when('bar' + data);
}

function third(data) {
   return $.when('baz' + data);
}

first().then(second).then(third)
  .done(function(data) {
     console.log(data); // Logs "bazbarfoo"
  });

위 내용은 Promises를 사용하여 jQuery에서 세 개의 비동기 호출을 어떻게 연결하고 한 호출에서 다음 호출로 데이터를 전달할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.