비동기와 프라미스
Promise는 자바스크립트에서 브라우저에서 제공하는 비동기 함수인 Web APIs를 실행할 때 실행한 코드가 완료 될때까지 대기하지 않고 바로 다음 코드를 실행할 수 있도록 해주고, 비동기 함수의 실행이 완료되면 then()함수를 통해서 그 결과에 대한 코드를 실행할 수 있게 해줍니다.
- Promise는 new 생성자 함수를 사용해서 생성합니다. - const promise = new Promise((resolve, reject) => { if(/*처리 성공 */) { resolve("결과 데이터"); } else { reject(new Error("에러")); } });
- 요청에 대한 응답이 성공적으로 오면, resolve() 함수에 결과 전달
- 실패하면 reject()함수에 에러 전달. 
- Promise 실행 함수가 가지고 있는 두 개의 파라미터 - resolve와- reject는 각각 무엇을 의미하나요?- resolve : 주어진 값으로 이행하는 새로운 프라미스 객체를 반환. 주어진 값이 then 메서드를 가지는 값인 경우 then메서드를 따라가서 최종상태를 결정.
- reject : 주어진 이유로 거절하는 새로운 프라미스 객체를 반환.
 
- resolve,- reject함수에는 인자를 넘길 수 있습니다. 이때 넘기는 인자는 어떻게 사용할 수 있나요?- then(), catch(), finally()등 후속 처리 메서드를 통해 사용.
 
- new Promise()를 통해 생성한 Promise 인스턴스에는 어떤 메서드가 존재하나요? 각각은 어떤 용도인가요?
- Promise.prototype.then메서드는 무엇을 리턴하나요?- Promise를 리턴하고 Promise 성공 or 실패 각각의 콜백함수를 인자로 받는다.
 
- Promise.prototype.catch메서드는 무엇을 리턴하나요?- returns a Promise and deals with rejected cases only - (in fact, calling - obj.catch(onRejected)internally calls- obj.then(undefined, onRejected)
- Promise의 세 가지 상태는 각각 무엇이며, 어떤 의미를 가지나요?- Pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태
- Fulfilled(이행) : 비동기 처리가 완료되어 프로미스 결과 값을 반환해준 상태
- Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태
 
- await키워드 다음에 등장하는 함수 실행은 어떤 타입을 리턴할 경우에만 의미가 있나요?- async함수는 항상 promise를 반환합니다. 만약- async함수의 반환값이 명시적으로 promise가 아니라면 암묵적으로 promise로 감싸집니다.- 예를 들어 - async function foo() { return 1; }- 위 코드는 아래와 같습니다. - function foo() { return Promise.resolve(1); }
- await키워드를 사용할 경우, 어떤 값이 리턴되나요?- Promise, await 문은 Promise가 fulfill되거나 reject 될 때까지 async 함수의 실행을 일시 정지하고, Promise가 fulfill되면 async함수를 일시 정지한 부분부터 실행. 이때 await 문의 반환값은 Promise에서 fullfill된 값이 됩니다.
 
- Promise.all의 인자는 어떠한 형태인가요?- 배열 같은 순회 가능한 객체
 
- Return value?- 매개변수가 비어 있으면 이미 이행(resolved)한 Promise
- 객체에 프로미스가 없으면, 비동기적으로 이행하는 Promise . 예외: 이미 이행한 프로미스(구글크롬)
- 다른 모든 경우에 pending 상태인 Promise
 
- Promise.all을 사용할 경우에- then메서드의 파라미터는 어떠한 형태인가요?- 배열 형태로 각각의 프로미스를 받아옴. 
- Promise.all에 두 개의 Promise 요청이 전달되고, 만일 그중 하나가 rejected 상태가 되는 경우,- then메서드를 따라가나요, 아니면- catch메서드를 따라가나요?- catch 메서드를 따라간다. Promise.all은 fail - fast behavior 이란 특징을 가짐.
- Promise.allwaits for all fulfillments (or the first rejection).
 
