Typescript Day 08 - Promise
21 Jun 2021 | TypescriptTypescript 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)); // 호출되지 않는다