Promise.resolve(undefined)
처럼 동작// Promise를 사용한 코드
const getSunIcon = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("☀️");
}, 3000);
});
};
const getWeatherIcon = () => {
const sun = getSunIcon();
//console.log(sun); // 이러면 결과 안나옴!
sun.then(console.log);
};
// async await를 사용한 코드
const getSunIcon = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("☀️");
}, 3000);
});
};
// 동기처럼 보임
const getWeatherIcon = async () => {
const sun = await getSunIcon();
console.log(sun);
};
getWeatherIcon()
const delay = (ms) =>
new Promise((resolve) => {
setTimeout(resolve, ms);
});
const getSunIcon = async () => {
await delay(1000);
return "☀️";
};
const getWaveIcon = async () => {
await delay(1000);
return "🌊";
};
const getCloudIcon = async () => {
await delay(1000);
return "☁️";
};
// 콜백 지옥
const getWeatherIcon = () => {
getSunIcon() //
.then((sun) => {
return getWaveIcon().then((wave) => {
return getCloudIcon().then((cloud) => {
console.log(sun, wave, cloud);
});
});
});
};
const getWeatherIcon2 = async () => {
const sun = await getSunIcon();
const wave = await getWaveIcon();
const cloud = await getCloudIcon();
console.log(sun, wave, cloud);
};
위의 코드로 동기처럼 보여 가독성이 좋아졌다는 점은 있지만 시간이 오래 걸린다는 단점
const getWeatherIcon = async () => {
// 일단 함수 전부 실행 (기다리는 건 나중에)
const sunPromise = getSunIcon();
const wavePromise = getWaveIcon();
const cloudPromise = getCloudIcon();
const sun = await sunPromise;
const wave = await wavePromise;
const cloud = await cloudPromise;
console.log(sun, wave, cloud);
};
const getWeatherIcon = async () => {
// 여러 개의 Promise를 동시에 병렬로 처리
const result = await Promise.all([
getSunIcon(),
getWaveIcon(),
getCloudIcon(),
]);
console.log(result.join(""));
};
const getAPI = () => {
const promise = fetch("https://jsonplaceholder.typicode.com/posts", {
method: "GET", // GET을 사용할 때는 fetch의 두번째 인자 생략 가능
});
// ...
}
const getAPI = () => {
const promise = fetch("https://jsonplaceholder.typicode.com/posts", {
method: "GET", // GET을 사용할 때는 fetch의 두번째 인자 생략 가능
});
promise
.then((response) => {
if(!response.ok) throw new Error("fetch error");
return response.json()
})
.then(console.log)
.catch(() => {
console.log("error");
});
}
const getApi = async () => {
// await는 catch가 없어서 try catch로 받아줌
try {
const response = await fetch("https:///jsonplaceholder.typicode.com/posts");
if (!response.ok) throw new Error("Error");
const data = await response.json(); // json 메서드는 Promise 반환 => await 필요
console.log(data);
} catch (e) {
console.log("r");
console.error(e);
} finally {
console.log("finally");
}
// 한번에 쓰는 것도 가능
// 단 이렇게 하면 response.ok를 체크하지 못함
const data2 = await (
await fetch("https:///jsonplaceholder.typicode.com/posts")
).json();
console.log(data2);
};
getApi();
function x() {
console.log("x1");
y();
console.log("x2");
}
function y() {
console.log("y1");
z();
console.log("y2");
}
async function z() {
console.log("z1");
setTimeout(() => console.log("setTimeout"), 0);
await w();
console.log("z2");
}
function w() {
return new Promise((resolve) => {
console.log("w1");
resolve();
console.log("w2");
}).then(() => console.log("promiseResolve"));
}
x();