여기서 우리는 세 가지 약속을 정의했습니다. 그런 다음 세 가지 약속을 기반으로 단일 약속을 반환하는 Promise.all() 방법을 정의했습니다. 이 예제에서는 세 가지 약속이 모두 해결되므로 Promise.all() 함수는 세 약속의 출력을 배열 형식으로 해결하고 출력합니다. 위의 예에서 두 번째 약속이 거부되어 최종 출력에 오류가 발생합니다. Promise.all은 요소가 거부되면 거부됩니다. 예를 들어, 시간 시간 이후에 해결되는 네 가지 약속과 즉시 거부하는 약속 하나를 전달하면 Promise.all은 즉시 거부됩니다. 예를 들어 위의 예와 같이 여러 개의 가져오기 호출이 있고 한 호출이 실패하는 경우 다른 호출은 계속 실행되지만 Promise.all은 더 이상 호출하지 않습니다. 그들은 아마 정착 하지만 결과 무시 됩니다. 위의 예는 간단합니다. 그러나 그것은 매우 수행되지 않습니다. 스택이 너무 무거워지고 한 시점에서 JavaScript는 서버를 죽일 수있는 엄청난 수의 열린 HTTP 연결을 갖게됩니다.
위의 예에서 Promise.all() 블록 내에서 이러한 오류를 catch하는 경우 약속이 오류로 거부된 다음 각 약속의 값을 표시합니다. 출력은 다음과 입니다. 물론 API 요청을 하는 시간에 따라 달라지므로 이 예제는 구성됩니다. 그러나 약속 생성을 함수로 이동하면 일반적으로 실제 코드에서 이 문제를 처리하는 방법과 비슷하게 조금 더 잘 수행할 수 있습니다. 더 나은 예를 들어 http 클라이언트처럼 작동하는 함수 apiRequest()를 만들었습니다. 예를 들어 여러 사용자에 대한 정보를 가져오려고 합니다. 한 요청이 실패하더라도 다른 요청에 관심이 있습니다. GitHub 사용자 배열에 대 한 사용자 정보를 이름으로 가져오는 더 큰 예제 (우리는 그들의 ids에 의해 상품의 배열을 가져올 수 있습니다., 논리는 동일): 우리가 간단한 예제를 보자.
app.js라는 하나의 파일을 만들고 다음 코드를 작성해 보겠습니다. 다음 예제에서는 Promise.all의 비동기성(또는 통과된 시간 이동이 비어 있는 경우 동기화)을 보여 줍니다. 모든 약속이 해결되거나 모든 약속이 해결 될 때까지 기다려야할 때를 알아야합니다. 그래서 당신은 Promise.all에 모든 열 약속을 전달하고 있습니다. 그런 다음 Promise.all 자체가 10개의 약속이 모두 해결되면 해결될 것입니다. 위의 예에서 Promise.all은 모든 약속이 해결될 때까지 기다린다는 것이 분명합니다. 위의 예에서 Promise.all은 2000ms 이후에 해결되고 출력은 배열로 콘솔화됩니다. 우리가 마지막에해야 할 모든 준비 약속을 기다린 다음 누적을 반환합니다. 반환된 약속은 인수로 전달된 모든 처리 가능한 값(약속이 아닌 값)을 모두 포함하는 배열로 수행됩니다. 인도에서 만든, 소프트웨어 엔지니어, 직렬 메이커, 레일 ❤️ 자바 스크립트 는 우리가 위의 약속 중 하나가 해결되지 않는 시나리오를 보자. 간단한 수행 방법은 일괄 처리로 수행하는 것입니다.
처음 500명의 사용자를 데리고 메일을 트리거하고 모든 HTTP 연결이 닫혀야 합니다.