여러 Promise를 비동기식으로 작업
이 문서의 목적은 루프 내에서 여러 비동기 작업을 실행하는 데 따른 문제와 완료를 보장해야 하는 필요성을 해결하는 것입니다. 후속 작업을 진행하기 전에.
루프가 일련의 작업을 반복하고 각 작업이 비동기식으로 실행되는 시나리오를 상상해 보세요. 루프 다음에 또 다른 루프는 첫 번째 루프의 작업 완료에 의존합니다. 이러한 조정을 어떻게 효율적으로 수행할 수 있습니까?
Promise는 이 문제에 대한 우아한 해결책을 제공합니다. doSomeAsyncStuff()에서 Promise를 반환하면 비동기 작업을 관리할 수 있습니다.
Promise.all()은 Promise 배열을 허용하고 단일 Promise를 반환하는 강력한 메서드입니다. 이 단일 Promise는 모든 입력 Promise가 해결되거나 그 중 하나가 거부되는 경우에만 해결됩니다.
목표를 달성하기 위해 Promise.all()을 다음과 같이 활용할 수 있습니다.
const promises = []; for (let i = 0; i < 5; i++) { promises.push(doSomeAsyncStuff()); } Promise.all(promises) .then(() => { // Execute tasks that require all async tasks to finish }) .catch((e) => { // Handle errors });
이 구현에서는 모든 Promise를 배열로 수집하여 Promise.all()에 전달합니다. 해결(또는 거부)되면 두 번째 루프의 작업을 진행합니다.
다음 예는 여러 비동기 작업이 완료될 때까지 기다리는 Promise.all()의 활용을 보여줍니다. 완료:
function doSomethingAsync(value) { return new Promise((resolve) => { setTimeout(() => { console.log("Resolving " + value); resolve(value); }, Math.floor(Math.random() * 1000)); }); } function test() { const promises = []; for (let i = 0; i < 5; i++) { promises.push(doSomethingAsync(i)); } Promise.all(promises) .then((results) => { console.log("All done", results); }) .catch((e) => { // Handle errors }); } test();
위 내용은 Promise.all()은 후속 작업을 진행하기 전에 어떻게 여러 비동기 작업을 효율적으로 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!