Archive

Typescript Day 08 - Promise

|

Typescript Day 08 - Promise


Promise

타입스크립트에서 프로미스는 제네릭 클래스 형태로 사용한다.

const strPromise: Promise<string> = new Promise<string>(콜백함수)

타입스크립트 Promise의 콜백 함수는 resolve와 reject 함수를 매개변수로 받는 형태이다.

new Promise<T>((
	resolve: (successValue: T) => void,
    reject: (any) => void
) => {
    // 코드 구현
})


resolve와 reject 함수

프로미스 구현 예시

import {readFile} from 'fs';

export const readFilePromise = (filename: string): Promise<string> =>
	new Promise<string>((
    	resolve: (value: string) => void,
        reject: (error: Error) => void
    ) => {
        readFile(filename, (err: Error, buffer: Buffer) => {
            if(err) reject(err);
            else resolve(buffer.toString());
        })
    })

프로미스 사용 예시

readFilePromise('./package.json')
	.then((content: string) => {
    console.log(content);
    return readFilePromise('./tsconfig.json');
	})
	.then((content: string) => {
    console.log(content);
	})
	.catch((err: Error) => console.log('error: ', err.message));
	.finally(() => console.log('프로그램 종료'));


Promise.resolve 메서드

Promise.resolve('hello')
	.then(value => console.log(value)); // hello

Promise.reject 메서드

Promise.reject(new Error('에러'))
	.catch((err: Error) => console.log('error', err.message)); // error: 에러


Promise.all 메서드

Promise.all은 Array 메서드의 every처럼 동작한다.

Promise.all(프로미스 객체 배열: Promise[]): Promise<resolve된 값들의 배열 혹은 any>

Promise.all 메서드는 Promise 객체들을 배열로 받아, resolve된 값들의 배열로 만들어 준다.

reject 객체 발생 시 더 기다리지 않고 reject 객체를 반환한다.

const getResult = <T>(promises: Promise<T>[]) => Promise.all(promises);

getResult<any>([Promise.resolve(true), Promise.resolve('hello')])
	.then(result => console.log(result)); // [true, 'hello']

getResult<any>([Promise.resolve(true), Promise.reject(new Error('에러'))])
	.then(result => console.log(result)) // 호출되지 않는다
	.catch(err => console.log('Error: ', err.message)); // Error: 에러


Promise.race 메서드

Promise.race는 Array 메서드의 some처럼 동작한다.

Promise.race는 Promise 객체를 배열로 받아 하나라도 resolve되면 즉시, resolve 객체를 반환한다.

reject 값이 먼저 발생하면 reject 객체를 반환한다.

Promise.race(프로미스 객체 배열: Promise[]): Promise(가장 먼저 해소된 객체 타입 혹은 Error)

Promise.race([Promise.resolve(true), Promise.reject(new Error('에러'))])
	.then(value => console.log(value)) // true
	.catch(err => console.log(err.message)); // 호출되지 않는다



참고 자료


Do it 타입스크립트 프로그래밍

Typescript-Handbook