-
[javascript] promise 에 대하여javascript 2021. 4. 23. 17:00반응형
비동기식 처리 모델(Asynchronous processing model 또는 Non-Blocking processing model)
동기적 처리가
요청이후 응답전까지 다른 작업을 진행하지 기다린다는 점에서
비동기는 non-blocking processing model 이라는 표현이 좀더 와닿는다
위 말에서 유추할수 있듯이 비동기적 이라는 말은 요청이후 응답시까지 기다리는동안 다음 태스크를 수행하고
응답완료시 이벤트가 발생하여 응답에 의한 데이터를 활용한 태스크가 이루어진다.
- 이벤트 핸들러
- Timer 함수(setTimeout, setInterval)
- Ajax 요청
위 3가지가 대표적으로 비동기식 처리 모델로 진행된다.
그러면 비동기는 알겟고 promise 는 뭔지 mdn 설명을 보자
설명
Promise는 프로미스가 생성될 때 꼭 알 수 있지는 않은 값을 위한 대리자로(요청에대한 응답), 비동기 연산이 종료된 이후의 결과값이나 실패 이유를 처리하기 위한 처리기를 연결할 수 있도록 합니다. 프로미스를 사용하면 비동기 메서드에서 마치 동기 메서드처럼 값을 반환할 수 있습니다. 다만 최종 결과를 반환하지는 않고, 대신 프로미스를 반환해서 미래의 어떤 시점(메서드를 사용함으로서)에 결과를 제공합니다.
>>> 비동기 연산 결과를 전달해주고 비동기메서드(ex.then) 를 사용하여 그안에서는 동기과정처럼 진행할수 있게 도와주는 객체???
한줄요약 : 자바스크립트 비동기처리에 사용되는 객체
아래코드는 프라미스 객체의 사용코드이다.
let promise = new Promise(function(resolve, reject) { setTimeout(() => resolve("done!"), 1000); }); promise.then( result => alert(result), // 1초 후 "done!"을 출력 error => alert(error) // 실행되지 않음 );
프라미스 객체의 state, result 프로퍼티는 내부 프로퍼티이다
- state — 처음엔 "pending"(보류)이었다 resolve가 호출되면 "fulfilled", reject가 호출되면 "rejected"로 변합니다.
- result — 처음엔 undefined이었다, resolve(value)가 호출되면 value로, reject(error)가 호출되면 error로 변합니다.
프라미스 객체의 메서드
then — 첫번째 인자로는 resolve 된 값이 들어와 그값을 사용할수 있는 메서드 , 두번째 자리에는 err시에 reject 된 값이 들어와 처리할수 있음
catch — then 메서드의 두번째 자리랑 똑같은 역할인데 좀더 구분하기 쉽게 사용할수 있는 메서드 첫번째 자리에 err 가 들어와서 처리해 줄수있다.(권장됨)
finally — 응답결과에 상관없이 실해되는 코드가 필요할 경우 사용할수 있는 메서드
'javascript' 카테고리의 다른 글
[자바스크립트] 가비지 컬렉션 (0) 2021.04.27 [자바스크립트] 이벤트 루프에 대해서 (0) 2021.04.26 [자바스크립트] this 에 대해서 (call,apply,bind) (0) 2021.04.13 [자바스크립트] 클로저에 대해서 (0) 2021.04.09 자바스크립트 실행컨텍스트에 대하여 ( Excution context) (1) 2021.04.08