TS非同期関数


非同期関数を作成するには:
만들고자 하는 함수 앞에 async를 붙여주고 promise 객체를 반환하는 함수를 만들어서 해당
함수 앞에 await를 붙여주면 비동기 함수를 작성할 수 있다. 그럴 경우 비동기 함수가 사용자
가 의도한 대로 동기적으로 작동한다.

간단한 작성 방법이 존재하기 때문에 콜백 지옥에 빠지지 않고 보다 직관적으로 코드를 작성할
수 있다. 예시를 통해 살펴보기로 하자.
Promiseを返すデフォルトのスケルトン関数の作成
function delay(ms: string): Promise<string> {
  return new Promise(() => {})
}
Promiseに戻るデフォルトのスケルトン関数にコールバック関数を配置
function delay(ms: number): Promise<string> {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (Math.floor(Math.random() * 10) % 2 === 0) {
                resolve('success');
            } else {
                reject('failure');
            }
        }, ms);
    });
}
作成する関数を待機し、Promiseオブジェクトに戻る関数を待機します.
function delay(ms: number): Promise<string> {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (Math.floor(Math.random() * 10) % 2 === 0) {
                resolve('success');
            } else {
                reject('failure');
            }
        }, ms);
    });
}

async function main() {
    try {
        const result = await delay(3000);
        console.log('done async! ' + result);
    } catch(e) {
        console.error('fail async! ' + e);
    }
}

main();
위의 구문에서 delay 함수가 resolve를 반환 할 경우 또는 rej를 반환할 경우
그 아래 코드는 위의 코드가 실행된 뒤에 동기적으로 실행되게 된다. 이 부분이 포
인트!