티스토리 뷰
오늘은 최근에 개발을 하면서 사용한 Javascript Promise 사용하는 방법에 대해 알아보려고 한다.
Promise 에 대한 정의보다는 간단한 사용법을 코드를 통해 간단히 정리를 남기려고 한다
요구사항
firstTask, secondTask, thirdTask 는 setTimout 으로 구현된 비동기 함수이다.
firstTask, secondTask, thirdTask. 순서로 함수가 동작해야 한다.
function firstTask(callback) { setTimeout(() => { callback('First task is finished'); }, 1000); } function secondTask(callback) { setTimeout(() => { callback('Second task is finished'); }, 1500); } function thirdTask(callback) { setTimeout(() => { callback('Third task is finished'); }, 2000); } firstTask((result) => { console.log(result); secondTask((result) => { console.log(result); thirdTask((result) => { console.log(result); }) }) });
Promise를 이용하면 아래 코드를 좀더 명시적으로 구현이 가능하다.
then()을 이용해서 체인형식으로 순차적으로 처리가 가능하다. 체인형식과 then 이라는 이름덕분에 코드의 순서를 좀 더 명확하게 이해가 가능하다.
여기서 resolve는 정상적으로 수행했을 때 동작하는 함수이고, reject는 비정상적으로 종료되었을 때 동작하는 함수이다.
('First task is finished' == 'result', resoleve == console.log(result))
그리고 중요한 것은 체인형식을 할 때, 리턴으로 Promise를 반환해야 한다는 것이다. 그래야 리턴되는 Promise를 다음 then() 메소드에서 처리가 가능하다.
function firstTask() { return new Promise((resolve, reject) => { setTimeout(() => { resolve('First task is finished'); }, 1000); }); } function secondTask(callback) { return new Promise((resolve, reject) => { setTimeout(() => { resolve('Second task is finished'); }, 1500); }); } function thirdTask(callback) { return new Promise((resolve, reject) => { setTimeout(() => { resolve('Third task is finished'); }, 2000); }); } firstTask().then((result) => { console.log(result); return secondTask(); }).then((result) => { console.log(result); return thirdTask(); }).then((result) => { console.log(result); });
이번에는 다른 요구사항을 통해 Promise 다른 기능을 살펴보려고 한다.
요구사항
firstTask, secondTask, lastTask 는 setTimout 으로 구현된 비동기 함수이다.
firstTask, secondTask 모두 종료되면, lastTask 가 수행해야 한다.
function firstTask() { return new Promise((resolve, reject) => { setTimeout(() => { resolve('First task is finished'); }, 1000); }); } function secondTask() { return new Promise((resolve, reject) => { setTimeout(() => { resolve('Second task is finished'); }, 1500); }); } function lastTask() { return new Promise((resolve, reject) => { setTimeout(() => { resolve('Last task is finished'); }, 2000); }); } let tasks = [firstTask(), secondTask()]; Promise.all(tasks).then((results) => { console.log(results[0]); console.log(results[1]); return lastTask(); }).then((result) => { console.log(result); });
오늘은 비동기를 처리하는데 많은 도움을 주는 Promise를 사용법 위주로 정리를 했다.
그리고 바로 이어서 다음 포스팅에서는 오늘 자주 사용했던 setTimeout 에 대해서 간단히 정리를 하겠다!
'Javascript' 카테고리의 다른 글
Mustache custom tag (0) | 2020.07.21 |
---|---|
setTimeout 과 싱글스레드 (0) | 2020.07.12 |
Javascript 객체의 필드(Key)명 변경하기 (0) | 2020.01.19 |
페이지 렌더링 순서 (1) | 2019.09.24 |