프로미스 사용이유:프로미스는 비동기적인 실행에 대한 코딩방법 중 하나임.
프로미스만으로는 코드가 동기적으로 변환되지 않음.
다른 비동기적인 실행에 대한 코딩 방법은 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));
}