javascript
에서는 Promise
를 통하여 비동기 작업을 수행할 수 있다.
일반적으로 Promise
를 사용하는 함수는 다음과 같은 구조를 가진다
function returnPromise () { return new Promise((resolve,reject) => { try{ resolve("성공"); }catch(error){ reject("실패"); } }) }
New Promise()
생성자는 resolve
와 reject
를 매개변수로 받는 콜백함수를 매개변수로 받는데
여기에 성공시 resolve
에, 실패시 reject
에 값을 담아 전달해준다.
resolve
에 담긴 값은 .then
절에서, reject
에 담긴 값은 .catch
절에서 사용할 수 있다.
다음과 같은 함수가 있다고 하자
let outsideResolve = null; function returnPromise (){ return new Promise((resolve,_) => { outsideResolve=resolve; }) }
해당 함수를 포함한 함수를 실행한다.
const func = async () =>{ let response = await returnPromise(); console.log(response); } func();
결과는 어떻게 될까?
console.log(response)
는 실행되지 않는다.
왜냐하면 returnPromise
의 resolve
값이 전달되지 않았기 때문이다.
그러면 이 상황에서 outsideResolve
는 어떤 상태일까?
outsideResolve
는 returnPromise
의 resolve
가 할당된 상태이다.
func
내부의 멈춰있던 함수가 실행된다.const func = async () =>{ let response = await returnPromise(); console.log(response); } func(); outsideResolve("외부 Resolve값 할당"); // 외부 Resolve값 할당
javascript
에서 어떻게보면 기본이라고 할 수 있는 Promise
에 대하여 제법 알고있다고 생각하였는데
찾아보다보니 생각지도 못한 사용방법들이 있어서 아직 공부할게 많다고 느껴진다.