>  기사  >  웹 프론트엔드  >  nodejs 다중 요청은 순서를 유지합니다

nodejs 다중 요청은 순서를 유지합니다

王林
王林원래의
2023-05-23 21:46:39776검색

Node.js는 확장 가능한 고성능 네트워크 애플리케이션을 개발하는 데 일반적으로 사용되는 이벤트 중심 JavaScript 런타임 환경입니다. 많은 시나리오에서 다양한 API 또는 데이터 소스에 여러 요청을 보내야 하며 이러한 요청의 순서가 보장되어야 합니다. 이 문서에서는 여러 요청의 순서를 유지하는 세 가지 방법을 소개합니다.

1. 콜백 함수 사용

Node.js에서 콜백 함수는 비동기 프로그래밍의 핵심입니다. 여러 요청에서 순서를 보장하기 위해 한 요청의 콜백 함수를 다른 요청의 콜백 함수로 사용할 수 있습니다.

예를 들어, 사용자 정보 획득, 사용자 주문 획득, 사용자 주소 획득이라는 세 가지 HTTP 요청을 보내려고 합니다. 후속 요청은 이전 요청의 데이터에 의존해야 하기 때문에 이 세 가지 요청을 순서대로 실행해야 합니다.

getUserInfo(userId, function(err, userInfo) {
  if (err) throw err;

  getUserOrder(userId, function(err, userOrder) {
    if (err) throw err;

    getUserAddress(userId, function(err, userAddress) {
      if (err) throw err;

      // 处理获取到的用户信息、订单和地址
      console.log(userInfo, userOrder, userAddress);
    });
  });
});

위 코드에서 getUserInfo, getUserOrder 및 getUserAddress는 모두 비동기 HTTP 요청이며 해당 콜백 함수는 다른 요청에 대한 콜백 함수 역할을 합니다. 이러한 방식으로 우리는 요청 순서를 보장하고 각 요청이 완료된 후 해당 데이터를 처리할 수 있습니다.

2. 비동기/대기 사용

ES2017 표준에서 JavaScript는 Promise 기반 비동기 프로그래밍 방법인 async/await 구문을 도입했습니다. async/await를 사용하면 비동기 코드를 동기 코드처럼 보이게 만들어 여러 비동기 요청의 순서를 더 쉽게 관리할 수 있습니다.

async function getUserInfo(userId) {
  const response = await fetch(`/api/user/${userId}/info`);
  const userInfo = await response.json();
  return userInfo;
}

async function getUserOrder(userId) {
  const response = await fetch(`/api/user/${userId}/order`);
  const userOrder = await response.json();
  return userOrder;
}

async function getUserAddress(userId) {
  const response = await fetch(`/api/user/${userId}/address`);
  const userAddress = await response.json();
  return userAddress;
}

async function getUserData(userId) {
  const userInfo = await getUserInfo(userId);
  const userOrder = await getUserOrder(userId);
  const userAddress = await getUserAddress(userId);
  return { userInfo, userOrder, userAddress };
}

getUserData(userId)
  .then(data => {
    // 处理获取到的用户信息、订单和地址
    console.log(data.userInfo, data.userOrder, data.userAddress);
  })
  .catch(error => {
    console.error(error);
  });

위 코드에서 getUserInfo, getUserOrder 및 getUserAddress는 모두 Promise를 반환하는 비동기 요청입니다. async/await를 사용하면 단순히 코드를 순차적으로 작성하여 순서를 보장할 수 있습니다. getUserData 함수는 세 가지 비동기 요청을 포함하는 고급 함수로, 사용자 데이터를 획득하고 사용자 정보, 주문 및 주소가 포함된 개체를 반환합니다. Promise 객체의 then 메소드는 반환된 데이터를 처리하는 데 사용되고, catch 메소드는 오류를 처리하는 데 사용됩니다.

3. Promise.all 및 배열 구조 분해 구문 사용

Promise.all 메서드는 여러 비동기 요청을 병렬로 실행하고 완료 시 결과를 반환하는 데 사용할 수 있는 Promise API에서 제공하는 방법입니다. async/await와 함께 사용하면 배열 분해 구문을 사용하여 반환된 결과를 배열로 분해하여 여러 요청의 결과를 더 쉽게 처리할 수 있습니다.

const userInfoPromise = fetch(`/api/user/${userId}/info`).then(response => response.json());
const userOrderPromise = fetch(`/api/user/${userId}/order`).then(response => response.json());
const userAddressPromise = fetch(`/api/user/${userId}/address`).then(response => response.json());

Promise.all([userInfoPromise, userOrderPromise, userAddressPromise])
  .then(([userInfo, userOrder, userAddress]) => {
    // 处理获取到的用户信息、订单和地址
    console.log(userInfo, userOrder, userAddress);
  })
  .catch(error => {
    console.error(error);
  });

위 코드에서는 가져오기 기능을 사용하여 사용자 정보, 주문 및 주소를 얻고 이를 각각 Promise 개체에 캡슐화합니다. 그런 다음 Promise.all 메서드를 사용하여 이 세 가지 Promise를 병렬로 실행하고 그 결과를 배열로 분해합니다. 위의 메소드와 마찬가지로 Promise 객체의 then 메소드를 사용하여 반환된 데이터를 처리하고, catch 메소드를 사용하여 오류를 처리합니다.

콜백 함수인 async/await 및 Promise.all을 사용하면 여러 비동기 요청의 순서를 쉽게 관리하고 결과를 처리할 수 있습니다. 다양한 시나리오와 요구 사항에 따라 Node.js 코드를 작성하는 데 가장 적합한 방법을 선택할 수 있습니다.

위 내용은 nodejs 다중 요청은 순서를 유지합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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