함수안의 다른함수를 통제하기위해 callback 함수를 사용한다
다른 함수를 통제함으로써 비동기적으로 사용할 수 있다
대표적 비동기 메소드
단점
가독성이 좋진 않다
Promise는 더욱 효율적인 비동기 처리를 위해 고안된 ES6 문법
작성 시 비동기로 작성해야 비동기의 장점을 충분히 활용할 수 있다
질문 Promise 실행함수가 가지고 있는 두 개의 파라미터 resolve 와 reject 는 각각 무엇을 의미하나?
resolve
와 reject
를 인자로 받는다then
과 catch
의 메소드가 있다특이사항
new Promise 객체는 promise를 리턴한다
Promise.prototype.then , Promise.prototype.catch는 Promise를 리턴한다
promise 객체는 promise를 반환하기 때문에 값을 도출 하기 위해선
then(resolve) 또는 catch(reject)를 사용해야하는데,
then() 메서드
Promise를 리턴하고 두 개의 콜백 함수를 인자로 받는다
하나는 Promise가 이행했을 때, 다른 하나는 거부했을 때를 위한 콜백 함수이다
then(resolve의 인자) => {
//성공 후 할일
}
catch() 메서드
질문 resolve, reject함수에는 인자를 넘길 수 있습니다. 이때 넘기는 인자는 어떻게 사용할 수 있나요?
질문 new Promise()를 통해 생성한 Promise 인스턴스
에는 어떤 메소드가 존재하나요? 각각은 어떤 용도인가요?
then()
, resolve의 인자를 받는다, Promise를 리턴한다catch()
, reject의 인자를 받는다, Promise를 리턴한다질문 Promise.prototype.then 메소드는 무엇을 리턴하나요?
질문 Promise.prototype.catch 메소드는 무엇을 리턴하나요?
두 메소드 다 Promise를 리턴한다
질문 Promise의 세 가지 상태는 각각 무엇이며, 어떤 의미를 가지나요?
대기(pending)
: 이행하거나 거부되지 않은 초기 상태이행(fulfilled)
: 연산이 성공적으로 완료됨거부(rejected)
: 연산이 실패함const 프로미스인스턴스 = new Promise(프로미스실행함수)
.then => 프로미스를 리턴한다
.then의 실행함수의 인자로 fulfilled된 결과가 전달 된다
즉, resolve의 첫번째 인자
.catch => 프로미스를 리턴한다
.catch의 실행함수의 인자로 rejected된 결과가 전달된다
스크립트 실행이 중간에 멈추는 것을 막는다
이렇게 에러를 catch하는 것을 에러핸들링이라고 한다
Promise instance => Promise를 리턴한다
resolve, reject => Promise를 리턴한다
.then, .catch => Promise를 리턴한다
이렇게 모두 Promise를 리턴하는데 Promise의 상태를 확인한다
에러를 then으로 받으면 Promise 상태가 rejected가되고,
catch로 받으면 Promise상태가 fulfilled로 받아올수 있다
(에러핸들링)
Promise를 여러개 처리해야 할 경우, 여러번 then도 사용가능하지만 Promise all로 대처해서 사용이 가능하다
const promiseArr = [new Promise(프로미스실행함수), new Promise(프로미스실행함수2)]
// promiseArr = [프로미스인스턴스, 프로미스인스턴스]
Promise.all(promiseArr) // Promise all 사용
promiseArr는 fulfilled상태이며, 프로미스인스턴스가 (then으로 사용한거 처럼) 해결이 된 상태로 배열에 담긴다
promiseArr는 fulfilled상태이며, 프로미스인스턴스가 (then으로 사용한거 처럼) 해결이 된 상태로 배열에 담긴다
즉 배열세트로 해결할 수 있다
Promise.all(promiseArr).then(([promiseArr의 첫번째 요소 프로미스인스턴스를 then 한 값, promiseArr의 두번째 요소 프로미스인스턴스를 then 한 값]) => {})
async 키워드를 사용한 함수 내부의
const asyncFunc = async => {
const await이 없는 경우 = new Promise(프로미스실행함수);
const await이 있는 경우 = await new Promise(프로미스실행함수);
}
await 키워드 다음에 등장하는 함수 실행은 어떤 타입을 리턴할 경우에만 의미가 있나요?
await 키워드를 사용할 경우, 어떤 값이 리턴되나요?
Promise의 resolve의 인자, 즉 결과값, Promise의 then을 하여 받은 값