Node.js는 확장 가능한 고성능 네트워크 애플리케이션을 개발하는 데 일반적으로 사용되는 이벤트 중심 JavaScript 런타임 환경입니다. 많은 시나리오에서 다양한 API 또는 데이터 소스에 여러 요청을 보내야 하며 이러한 요청의 순서가 보장되어야 합니다. 이 문서에서는 여러 요청의 순서를 유지하는 세 가지 방법을 소개합니다.
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 요청이며 해당 콜백 함수는 다른 요청에 대한 콜백 함수 역할을 합니다. 이러한 방식으로 우리는 요청 순서를 보장하고 각 요청이 완료된 후 해당 데이터를 처리할 수 있습니다.
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 메소드는 오류를 처리하는 데 사용됩니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!