실시간 코드 예제와 함께 JavaScript Promise.all을 사용하는 방법 [Axios GET Calls]
3742 단어 webdevbeginnersreactjavascript
Promise.all이란 무엇입니까?
Promise.all()은 Promise의 배열(그룹)을 입력으로 사용하고 프로세스를 단일 Promise로 수행하고 Than-able 또는 catch에서 반환하는 정적 메서드입니다.
Promise.all의 기본 구문은 다음과 같습니다.
Promise.all([promise1, promise2,.....])
.then(result=>{
//Congrats! Promise got resolved.
}).catch(err=>{
//Ohh ! Promise got rejected.
})
여기서 promise1, promise2는 약속도 반환하는 비동기 함수입니다.
Promise.all 메서드를 사용하는 경우
한 번에 처리할 비동기 작업 그룹이 있는 경우 Promise.all()을 사용하는 것이 좋습니다.
명확하게 이해하기 위해 Promise.all() 함수에 의해 해결되는 비동기 함수의 예를 들어 보겠습니다.
const p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('p1 completed');
},1000);
})
const p2 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('p2 completed');
},2000);
})
const p3 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('p3 completed');
},3000);
})
Promise.all([p1,p2,p3,])
.then(result=>{
console.log(result);
}).catch(err=>{
console.log(err);
})
위의 코드 스니펫에서 반환된 결과
[ 'p1 completed', 'p2 completed', 'p3 completed' ]
위의 예에서 우리는 p1, p2 및 p3이 함수로 setTimeout을 가지고 있기 때문에 비동기 함수임을 알 수 있습니다. 각 함수는 각각 1, 2 및 3초 후에 해결되지만 Promise.all은 마지막 함수가 해결되면 해결됩니다. Promise.all() 메서드의 아름다움.
Promise.all() 메서드의 핵심 속성은 모든 함수를 해결하고 입력 함수 배열에 지정한 순서대로 결과를 반환한다는 것입니다.
모든 배열 함수(p1,p2,p3)가 해결되면 결과만 then-able로 제공됩니다.
그렇지 않고 어떤 이유로든 Promise 함수 중 하나가 거부되면 Promise.all() 메서드는 catch() 블록으로 이동합니다. 이 시나리오에 대한 아래 예를 볼 수 있습니다.
const p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('p1 completed');
},1000);
})
const p2 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('p2 completed');
},2000);
})
const p3 = new Promise((resolve,reject)=>{
setTimeout(()=>{
reject(new Error('p3 rejected'));
},3000);
})
Promise.all([p1,p2,p3,])
.then(result=>{
console.log(result);
}).catch(err=>{
console.log(err);
})
잘라낸 이 코드는 catch 블록에 올 것입니다.
Error: p3 rejected
이제 Promise.all()의 실시간 예를 살펴보겠습니다.
3개의 API를 호출해야 하는 대시보드가 있다고 가정합니다.
API가 호출할 때까지 화면에 로더를 표시해야 합니다. 따라서 Promise.all() 메서드를 사용하여 이를 매우 쉽게 달성할 수 있습니다.
아래 예시를 참고해주세요
const axios = require('axios');
const task = async (id)=>{
const response = await axios(`https://reqres.in/api/users/${id}`);
const {data} = response;
return data.data;
}
const ids = [1,2,3];
const allTasks = ids.map((pageNumber)=>{
return task(pageNumber);
});
// you can start page loader here
Promise.all(allTasks)
.then((result)=>{
console.log(result);
// once the task is finished then you stop loader over here
}).catch((err)=>{
//If error comes then also you have to stop loader
console.log(err);
})
위의 예에서 기본적으로 api를 호출하는 비동기 함수인 'task'라는 함수를 만들었습니다.
따라서 UserID 1,2 및 3에 대해 3개의 API를 호출해야 하므로 3개의 API 호출을 단일 배열(allTasks)로 그룹화하고 배열을 Promise.all(allTasks)에 입력으로 전달하고 해결 또는 거부를 기다립니다. .
모든 apis가 성공적으로 실행되면 배열 형식의 결과가 예상됩니다(사용자 응답).
api 중 하나라도 거부되면 catch 블록에서 오류를 예상해야 합니다.
제 작은 노력을 읽어주셔서 감사합니다.
글이 마음에 드셨다면 좋아요와 댓글 부탁드립니다.
Reference
이 문제에 관하여(실시간 코드 예제와 함께 JavaScript Promise.all을 사용하는 방법 [Axios GET Calls]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/imranmind/how-to-use-javascript-promiseall-with-realtime-code-example-axios-get-calls-1hnk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)