프로미스 사용이유:프로미스는 비동기적인 실행에 대한 코딩방법 중 하나임.
프로미스만으로는 코드가 동기적으로 변환되지 않음.
다른 비동기적인 실행에 대한 코딩 방법은 NonBlocking, Callback이 있음.

처음상태는 pending상태이고 작업이 성공했을시 resolve가 실행되고 fulfilled상태
작업실패지 reject가 실행되고 rejected상태.fulfilled,rejected는 settled상태이기도 하다.

function getData() {
  return new Promise(function (resolve, reject) {
    $.get('url 주소/products/1', function (response) {
      if (response) {
        resolve(response);
      }
      reject(new Error("Request is failed"));
    });
  });
}

.then을 이용하여 프로미스를 chaining할 수 있다.resolve가 실행될 경우에만 .then이 실행
rejected시 catch가 실행.

async는 항상 프로미스를 반환
await은 프로미스가 결과를 반환시킬때까지 기다려준다.즉 settled상태가 되도록한다.
에러처리는 try/catch 를 이용하여 처리

public async sendRequest(file: File): Promise<void> {   //잘못된 예 async자체가 promise반환인데 promise
    return new Promise((resolve, reject) => {           //로 한번더 감싸주었다
      resolve(this.props.fileManager.uploadFile(file.name, file));
    }
public async sendRequest(file: File): Promise<void> {  //올바른 예
await(this.props.fileManager.uploadFile(file.name, file));
}